我当前调用WCF的方法是bog标准事件,async样式(例如)
foo.EventArgs += Foo_EventArgsCompleted
foo.EventArgsAsync(params...)
这样可以正常工作,但有时会非常慢,而且还很麻烦,因为您需要另一种方法来处理结果。
有没有办法让它更接近Win8上的编码方式?
private async foo<bool>()
{
try
{
await foo.EventArgsAsync(params...)
}
catch
{
// catch here
}
// deal with the code back
return true;
}
由于
保
答案 0 :(得分:0)
你可以write your own *TaskAsync
extension methods。
如果您的代理拥有*Begin
/ *End
方法,则可以使用TaskFactory.FromAsync
:
public static Task<int> FooTaskAsync(this FooClient client)
{
return Task<int>.Factory.FromAsync(client.BeginFoo, client.EndFoo, null);
}
否则,您必须使用TaskCompletionSource
:
public Task<int> FooTaskAsync(this FooClient client)
{
var tcs = new TaskCompletionSource<int>();
client.FooCompleted += (s, e) =>
{
if (e.Error != null) tcs.SetException(e.Error);
else if (e.Cancelled) tcs.SetCanceled();
else tcs.SetResult(e.Result);
};
client.FooAsync();
return tcs.Task;
}