WinRT异步调用计数配额

时间:2013-11-20 19:52:38

标签: c# asynchronous windows-8 windows-runtime async-await

在我的WinRT应用程序中发生了下一个错误:

  

mscorlib.dll中出现'System.InvalidOperationException'类型的第一次机会异常   WinRT信息:超出最大并发操作数的配额。在开始新操作之前等待操作完成。   附加信息:在意外时间调用方法。

它总是在像

这样的行上失败
await SaveImageAsync(imageMega, fileName);

我有很多异步操作。可能有一个问题,我同时执行了很多异步任务? 如果是这样,我该如何处理?

1 个答案:

答案 0 :(得分:-1)

您是从一段代码执行所有操作吗?或者它们是否在整个项目中传播?

如果您可以批量处理,请使用Parallel.ForEachParallel.For进行批处理。 您可以使用ParallelOptions来限制并发执行的数量。 但是,您必须同步执行此操作:

List<ImageData> imgData = //...
Parallel.ForEach(imgData,
                 new ParallelOptions { MaxDegreeOfParallelism = 10 },
                 data => SaveImageAsync(data.imageMega, data.fileName)).Wait();

如果您决定采用这种方法,我建议您不要使用异步 - 将async Task SaveImageAsync更改为void SaveImageAsync。 如果此方法使用WInRT的文件IO操作,则可以使用GetAwaiterGetResult方法使它们同步:

var file = folder.GetFileAsync(Filename).GetAwaiter().GetResult();