我有一个采用 Action<String>
的方法.当该方法完成其处理时,它调用 Action<String>
与返回值。
MethodWithCallback((finalResponse)=> {
Console.WriteLine(finalResponse);
});
我想在 web.api 异步 Controller 中使用它。如何包装此方法以便我可以 await
此方法在 async
中完成方式。我无法修改方法本身,它在遗留代码库中。
我想做的就是这个
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<T> 回调转换为等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830601/