我正在调用第三方API,其方法如下所示:
myServiceClient.Discover(key, OnCompletionCallback);
public bool OnCompletionCallback(string response)
{
// my code
}
Run Code Online (Sandbox Code Playgroud)
我的挑战是,我必须打电话,Discover因为它做了一些我需要的工作.同时,Discover在运行自定义代码之前,我必须等待完成.更复杂的是,我不能把我的代码放在OnCompletionCallback处理程序中,因为我需要从Func委托调用上面的代码.简而言之,我想这样做:
Func<SystemTask> myFunction = async () =>
{
await myServiceClient.Discover(key);
// my code
}
Run Code Online (Sandbox Code Playgroud)
但是,我不能这样做,因为第三方API使用回调方法而不是async/await方法.
有没有办法让回调方法在异步/等待世界中运行?
Ese*_*ser 17
如果我理解你,你可以做这样的事情
public Task<bool> MyAsyncFunction()
{
var tcs = new TaskCompletionSource<bool>();
myServiceClient.Discover("somekey", s => {
//........
var res = true;
tcs.TrySetResult(res);
return res;
});
return tcs.Task;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以等待MyAsyncFunction
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |