c# - 多个调用等待同一个异步任务

标签 c# asynchronous windows-runtime task .net-4.5

基本上,我的应用程序中有很多地方需要确保下载产品图像才能执行某些操作。我想把这个调用集中到一个地方,所以我确保只下载一次。我正在尝试在类里面这样做:

private IAsyncOperation<bool> _downloadCoverTask;

internal IAsyncOperation<bool> DownloadCoverAsync()
{
    if (this._downloadCoverTask == null)
    {
        this._downloadCoverTask = this._cloudProduct.Image.DownloadAsync();
    }

    return this._downloadCoverTask;
}

_cloudProduct.Image.DownloadAsync() 是一种实际执行图像下载的方法(它也恰好位于我无法控制的库中)。

所以在我需要下载图像的代码中,我这样做了

await product.DownloadCoverAsync();
// do stuff with the image

我第一次调用它时工作正常,但第二次调用时出现异常“不允许分配委托(delegate)。”我也没有得到任何堆栈跟踪或任何东西。

这会被称为一堆地方,但我希望他们都等待同一个任务,然后在完成后继续。如果它已经完成,我希望它会立即返回。可能是我误会了,事情不是这样的?

(是的,我发布了这个 before ,但无法得到答案,我认为这个问题更好地总结了这个问题。还有 this question ,但它使用 TPL 并且似乎有更多复杂的目标。)

最佳答案

尝试使用 Task<bool>而不是 IAsyncOperation<bool> .您可以使用 AsTask 获取任务扩展方法。

关于c# - 多个调用等待同一个异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12467913/

相关文章:

c# - 简单正则表达式的困难(匹配前缀/后缀)

c# - 通过反射表示类型 Func<dynamic, object>

c# - HttpClient 的进度条

c# - WINRT_NOT_PRESENT 的目的是什么?

c# - .Net Maui - 如何返回根页面

c# - 将程序集加载到当前域的正确方法

Javascript,如何实现从多个工作人员调用的 "blocking"函数

javascript - 弃用警告 : Calling an asynchronous function without callback is deprecated

c# - ontextchanged 异步 sql 存储过程调用

c++ - 如何定位 WinRT 异步方法调用中出现错误的位置?