【发布时间】:2010-04-10 20:20:08
【问题描述】:
当异步调用 WCF 服务时,似乎有两种方法可以完成。
1.
WcfClient _client = new WcfClient();
public void One()
{
_client.BegindoSearch("input", ResultOne, null);
}
private void ResultOne(IAsyncResult ar)
{
string data = _client.EnddoSearch(ar);
}
2.
public void Two()
{
WcfClient client = new WcfClient();
client.doSearchCompleted += TwoCompleted;
client.doSearchAsync("input");
}
void TwoCompleted(object sender, doSearchCompletedEventArgs e)
{
string data = e.Result;
}
有了新的Task<T> 类,我们有了第三种简单的方法,将同步操作封装在一个任务中。
3.
public void Three()
{
WcfClient client = new WcfClient();
var task = Task<string>.Factory.StartNew(() => client.doSearch("input"));
string data = task.Result;
}
它们都使您能够在等待结果时执行其他代码,但我认为Task<T> 可以更好地控制您在检索结果之前或之后执行的内容。
使用其中一种有什么优点或缺点?还是一种更可取的方式?
【问题讨论】:
标签: c# .net wcf asynchronous .net-4.0