Синхронизировать асинхронно вызванные методы?

Предположим, что вы вызываете методы асинхронно в потоке пользовательского интерфейса.

С

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

http://msdn.microsoft.com/en-us/library/ms228969.aspx

Другие вопросы по тегам