c# - 等待回调方法
问题描述
我正在调用一个第三方 API,它的方法如下所示:
myServiceClient.Discover(key, OnCompletionCallback);
public bool OnCompletionCallback(string response)
{
// my code
}
我的挑战是,我必须打电话Discover
,因为它可以在幕后完成一些我需要的工作。同时,Discover
在运行我的自定义代码之前,我必须等待完成。更复杂的是,我不能只将我的代码放在OnCompletionCallback
处理程序中,因为我需要从Func
委托中调用上面的代码。简而言之,我想这样做:
Func<SystemTask> myFunction = async () =>
{
await myServiceClient.Discover(key);
// my code
}
但是,我不能这样做,因为第三方 API 使用回调方法而不是 async/await 方法。
有没有办法让回调方法在 async / await 世界中工作?
解决方案
如果我理解正确,你可以做这样的事情
public Task<bool> MyAsyncFunction()
{
var tcs = new TaskCompletionSource<bool>();
myServiceClient.Discover("somekey", s => {
//........
var res = true;
tcs.TrySetResult(res);
return res;
});
return tcs.Task;
}
现在您可以等待MyAsyncFunction
推荐阅读
- python - 使用 Pandas 查询函数并测试字符串是否在包含列表的列中
- java - 如何从android中的xml获取图像的大小
- c++ - QString::QString(QString &&other) 是做什么用的?
- javascript - 正则表达式将图像降价解析为图像 html javascript
- r - ggplot2 直线和 r^2 的方程
- kotlin - 科特林。是否可以在文件级别设置 log4j 记录器?
- apache-spark - spark'join with condition'与'join with filter',哪个更好?
- bash - 通过 3 台服务器进行 SSH 的 Shell 脚本
- typescript - 了解 AWS-Config 规则和配置更改
- iis - 阻止除 umbraco 管理员之外的所有人访问目录