Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinRT异步调用计数配额_C#_Asynchronous_Windows 8_Windows Runtime_Async Await - Fatal编程技术网

C# WinRT异步调用计数配额

C# WinRT异步调用计数配额,c#,asynchronous,windows-8,windows-runtime,async-await,C#,Asynchronous,Windows 8,Windows Runtime,Async Await,在我的WinRT应用程序中发生下一个错误: mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次意外异常 WinRT信息:超出最大并发操作数的配额。在启动新操作之前,请等待操作完成。 其他信息:在意外时间调用了方法 它总是在像这样的线路上失败 await SaveImageAsync(imageMega, fileName); 我有很多异步操作。可能有一个问题,我同时执行很多异步任务? 如果是,我如何处理 您是否从一段代码执行所有操作

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

mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次意外异常 WinRT信息:超出最大并发操作数的配额。在启动新操作之前,请等待操作完成。 其他信息:在意外时间调用了方法

它总是在像这样的线路上失败

await SaveImageAsync(imageMega, fileName);
我有很多异步操作。可能有一个问题,我同时执行很多异步任务?
如果是,我如何处理

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

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

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

Parallel.ForEach不适用于异步方法。它基本上会限制启动异步操作的数量,但不会限制真正执行异步操作的数量。同步等待异步方法也是一个非常糟糕的主意。1.它阻塞了UI线程,这正是整个async Wait试图避免的。2.这样很容易造成死锁,这要视情况而定。如果这段代码是在一个任务内或在它自己的线程上执行的,那么它不会阻塞UI。他唯一会阻止的异步调用是像GetFyleAsync这样的IO调用——如果你像我建议的那样使用等待器,你就不会造成任何死锁。
var file = folder.GetFileAsync(Filename).GetAwaiter().GetResult();