提问者:小点点

如何在C#中将同步函数包装为异步函数?[副本]


我正在使用无法修改的同步第三个功能,例如:

public void startDoSth(Action<string> onDone)

生成一个新的线程来完成这项工作,并立即返回,当事情完成时,我的onDone函数将被调用。

我想写一个异步方法来包装,这样有人可以这样调用它:

await doSthAsync()
onDone()

doSthasync()中,我调用starDoSth()来做真正的事情。但是我不知道如何编写doSthAsync()

有人能告诉我这是否可能,以及怎么做吗?谢谢。


共1个答案

匿名用户

您可以使用TaskCompletionSource将其转换为TAP:

Task<string> DoSthAsync()
{
    var tcs = new TaskCompletionSource<string>();
    startDoSth(tcs.SetResult);
    return tcs.Task;
}

SetResult完成返回的Task(并设置结果),因此可以将其作为回调函数传递。

相关问题