首页 > 解决方案 > 等待回调方法

问题描述

我正在调用一个第三方 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 世​​界中工作?

标签: c#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


推荐阅读