Re: async await и IsolatedStorage
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 30.10.14 11:38
Оценка: 3 (1)
Здравствуйте, ravel, Вы писали:

R>Помогите пожалуйста разобраться, что я делаю не так


Попробую суммировать.

Как уже сказали, IsolatedStorageFile непотокобезопасен. По этой причине возникают проблемы при обращении к экземпляру этого класса из нескольких параллельно запущенных асинхронных методов.
Отсюда могло бы следовать, что доступ к этому экземпляру нужно синхронизировать. Обычным способом синхронизации является оператор lock(). Но в теле асинхронного метода его нельзя использовать (вернее так: операторы await нельзя использовать в теле оператора lock()). Поэтому Вам предложили использовать именованные мьютексы.

Однако, если тем или иным способом защитить экземпляр IsolatedStorageFile — проблему это, конечно, решит, но сделает бессмысленным использование асинхронных методов и их параллельный вызов: все обращения к IsolatedStorage выстроятся в очередь.

Поэтому правильным решением было бы просто создавать несколько экземпляров IsolatedStorageFile. Внутри асинхронного метода (а не снаружи, как у Вас).
Это тоже не гарантирует больших преимуществ от параллельности (в любом случае тестить надо), но по крайней мере асинхронный код будет иметь смысл.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.