+-
c# – 将Action回调转换为await
我有一个采用Action< String>的方法.当方法完成其处理时,它调用Action< String>带有返回值.

MethodWithCallback((finalResponse)=> {
   Console.WriteLine(finalResponse);
});

我想在web.api异步控制器中使用它.如何包装此方法,以便我可以等待此方法以异步方式完成.我无法修改方法本身,它在遗留代码库中.

我希望能做的就是这个

String returnValue = await MyWrapperMethodThatCallsMethodWithCallback();
最佳答案
您可以利用 TaskCompletionSource类并以通用方式解决问题:

Task<T> AsAsync<T>(Action<Action<T>> target) {
    var tcs = new TaskCompletionSource<T>();
    try {
        target(t => tcs.SetResult(t));
    } catch (Exception ex) {
        tcs.SetException(ex);
    }
    return tcs.Task;
}

这样您就不必修改MethodWhitCallback:

var result = await AsAsync<string>(MethodWithCallback);
Console.WriteLine(result);
点击查看更多相关文章

转载注明原文:c# – 将Action回调转换为await - 乐贴网