【问题标题】:Awaiting a Callback method等待回调方法
【发布时间】:2018-05-02 05:13:46
【问题描述】:

我正在调用一个第三方 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 方法。

有没有办法让回调方法在异步/等待世界中工作?

【问题讨论】:

    标签: c# async-await


    【解决方案1】:

    如果我理解正确,你可以这样做

    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

    【讨论】:

    • 只是在写我的评论。正是我的想法。到头来,一切都还只是一个代表。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多