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

C# 多个调用等待同一异步任务,c#,asynchronous,windows-runtime,task,.net-4.5,C#,Asynchronous,Windows Runtime,Task,.net 4.5,基本上,我的应用程序中有很多地方,为了做一些事情,我需要确保下载产品图像。我想把这个电话集中在一个地方,所以我确保只下载一次。我试着在课堂上这样做: private IAsyncOperation<bool> _downloadCoverTask; internal IAsyncOperation<bool> DownloadCoverAsync() { if (this._downloadCoverTask == null) { thi

基本上,我的应用程序中有很多地方,为了做一些事情,我需要确保下载产品图像。我想把这个电话集中在一个地方,所以我确保只下载一次。我试着在课堂上这样做:

private IAsyncOperation<bool> _downloadCoverTask;

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

    return this._downloadCoverTask;
}
在我第一次调用它时,它工作正常,但在第二次调用它时,我得到一个异常“不允许时分配了一个委托”。我也没有得到任何堆栈跟踪或任何东西

这将被称为一堆地方,但我希望他们都会等待相同的任务,然后在任务完成后继续。如果它已经完成了,我希望它能马上回来。有可能是我的误解,而这不是它的工作原理


(是的,我发布了这个,但没有得到答案,我认为这个问题更好地总结了这个问题。还有,但它使用TPL,似乎有一个更复杂的目标。)

尝试使用
任务
而不是
IAsyncOperation
。您可以使用扩展方法获取任务。

对于
任务
我相信您会没事的。。。看起来这是WinRT特有的问题:(我本来打算发布同样的答案,我给了你的另一个问题。你能描述为什么它不起作用吗?对于后人来说,这个错误也可以显示出一个地方,当C++中你在一个代码中调用<代码> CealEyTebug < /C++ > IASYNcCurtudio两次。
await product.DownloadCoverAsync();
// do stuff with the image