Синхронизировать асинхронно вызванные методы?
Предположим, что вы вызываете методы асинхронно в потоке пользовательского интерфейса.
С
UIDispatcher.BeginInvoke( new Action(_insert), DispatcherPriority.Normal, new object[] { } )
вы делаете вызов. С этого момента среда выполнения решает, когда выполнять метод, тогда как программа продолжает свой "нормальный" путь выполнения.
Теперь мне интересно, существуют ли какие-либо механизмы для синхронизации этих асинхронно выполняемых методов, когда они возвращаются? Кажется, что есть почти те же проблемы, что и при использовании нескольких потоков.
Но является ли возвращаемый метод, который был вызван асинхронно, прежде чем считаться потоком? Это не так, потому что обычные синхронизирующие усилия, такие как
lock (someObject) { //... }
или использование выделенных замков, похоже, не работает.
Приложение:
Моя настоящая ситуация, когда возникает эта проблема, выглядит следующим образом:
Асинхронно вызываемый метод вызывает в качестве своего последнего оператора return
метод статического класса. Внутри этого return
Метод часто используемый ресурс (список) должен быть синхронизирован. Для примера рассмотрим следующий (похожий на обзор) фрагмент кода:
// A simple method that gets invoked asynchronously
public void _insert () {
// do some code
StaticClass.Returned();
}
public static StaticClass {
//...
public static void Returned () {
// use a shared resource !
}
}
1 ответ
Либо используйте асинхронный шаблон.NET, BackgroundWorker
или ManualResetEvent