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