将IAsyncResult模式转换为任务

时间:2018-10-09 22:08:01

标签: c# .net

我正在使用IAsyncResult模式使用一些较旧的代码。已经为开始和结束操作定义了委托。我应该如何将它们重构为基于任务的,而不必担心代表的实现?

当前代码示例:

this.CallAsync(
    (thisRef, t, c, s) => thisRef.SomeMethod(thisRef.targetHost, t, c, s),
    (thisRef, r) => thisRef.SomeMethod2(r));

其中的定义如下:

void CallAsync(BeginCall beginCall, EndCall endCall) {
    // do some async operations with beginCall and endCall
}

delegate IAsyncResult BeginCall(T thisPtr, TimeSpan timeout, AsyncCallback callback, object state);
delegate void EndCall(T thisPtr, IAsyncResult r);

1 个答案:

答案 0 :(得分:3)

我认为最安全的选择是使用TaskFactory.FromAsync方法。您需要选择正确的重载以适合您现有的委托定义。