为什么不能等待这个IAsyncOperation?

时间:2016-07-01 13:02:49

标签: c# .net multithreading asynchronous uwp

问题已经answered in the comments谢谢。

tl; dr version :我试图根据this同步进行异步运行,但它已经冻结了。

我有

BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

哪种方法正常。

我需要将其更改为不同步,因此我尝试将其更改为this answer中提及的内容:

BitmapDecoder decoder = SyncDecoder(BitmapDecoder.CreateAsync(stream));

其中:

BitmapDecoder SyncDecoder(IAsyncOperation<BitmapDecoder> async) { return Task.Run(() => async.AsTask()).Result; }

或更长的(我认为相当的)版本:

BitmapDecoder SyncDecoder(IAsyncOperation<BitmapDecoder> async)
{
    Func<Task<BitmapDecoder>> asLambda = () => async.AsTask();
    Task<BitmapDecoder> asTask = Task.Run(asLambda);
    asTask.Wait(); // freezes            
    return asTask.Result;
}

但是,SyncDecoder永远不会返回。 (在第二个版本中,它冻结在Wait()上。)

我尝试为IReadOnlyList<StorageFile>(和storageFolder.GetFilesAsync())制作相同的方法, 的工作正常。所以 也应该在这里工作。但是没有。

我知道通常不应阻止UI线程,但我们需要修复现有代码。不承担大型重构项目。那么如何将代码转换为同步?

0 个答案:

没有答案