在我的WinRT应用程序中发生了下一个错误:
mscorlib.dll中出现'System.InvalidOperationException'类型的第一次机会异常 WinRT信息:超出最大并发操作数的配额。在开始新操作之前等待操作完成。 附加信息:在意外时间调用方法。
它总是在像
这样的行上失败await SaveImageAsync(imageMega, fileName);
我有很多异步操作。可能有一个问题,我同时执行了很多异步任务? 如果是这样,我该如何处理?
答案 0 :(得分:-1)
您是从一段代码执行所有操作吗?或者它们是否在整个项目中传播?
如果您可以批量处理,请使用Parallel.ForEach
或Parallel.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操作,则可以使用GetAwaiter
和GetResult
方法使它们同步:
var file = folder.GetFileAsync(Filename).GetAwaiter().GetResult();