将 IAsyncResult 模式转换为任务

Zig*_*oon 1 .net c#

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

当前代码示例:

this.CallAsync(
    (thisRef, t, c, s) => thisRef.SomeMethod(thisRef.targetHost, t, c, s),
    (thisRef, r) => thisRef.SomeMethod2(r));
Run Code Online (Sandbox Code Playgroud)

其中定义如下:

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);
Run Code Online (Sandbox Code Playgroud)

mur*_*tgu 5

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