2013-11-20 3 views
1

В моем WinRT приложения произошла следующая ошибка:WinRT Асинхронный вызовы Количество квот

A first chance exception of type 'System.InvalidOperationException' occurred in mscorlib.dll WinRT information: Quota for maximum number of concurrent operations exceeded. Wait for an operation to complete before starting new ones. Additional information: A method was called at an unexpected time.

Он всегда терпит неудачу на линиях как

await SaveImageAsync(imageMega, fileName); 

У меня есть много асинхронной операции. Может быть, проблема в том, что я выполняю одновременно много асинхронных задач? Если да, то как я могу справиться с этим?

ответ

-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, вы можете сделать их синхронное использование GetAwaiter и GetResult методы:

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

'Parallel.ForEach' не работает для' методов async'. В основном это ограничивает количество асинхронных действий * начиная *, но не сколько из них действительно выполняется. – svick

+0

@ svick Хорошая точка - я исправил свой пост. – dcastro

+0

Синхронное ожидание асинхронных методов - тоже очень плохая идея. 1. Он блокирует поток пользовательского интерфейса, и это то, чего пытается избежать асинхронное ожидание. 2. Очень легко вызвать тупики таким образом. – svick

Смежные вопросы