我正在使用无法修改的同步第三个功能,例如:
public void startDoSth(Action<string> onDone)
生成一个新的线程来完成这项工作,并立即返回,当事情完成时,我的onDone函数将被调用。
我想写一个异步方法来包装,这样有人可以这样调用它:
await doSthAsync()
onDone()
在doSthasync()
中,我调用starDoSth()
来做真正的事情。但是我不知道如何编写doSthAsync()
。
有人能告诉我这是否可能,以及怎么做吗?谢谢。
您可以使用TaskCompletionSource
将其转换为TAP:
Task<string> DoSthAsync()
{
var tcs = new TaskCompletionSource<string>();
startDoSth(tcs.SetResult);
return tcs.Task;
}
SetResult
完成返回的Task
(并设置结果),因此可以将其作为回调函数传递。