Как работает и реализуется шаблон вызова асинхронного метода в c #? - PullRequest
0 голосов
/ 05 мая 2009

Я перемещаю много кода свободно, основываясь на асинхронном вызове метода . Как это обычно реализуется (желательно в производстве)?

  • Как это работает?
  • Как это используется?
  • Как это реализовано?

Ответы [ 2 ]

4 голосов
/ 05 мая 2009

Шаблон обычно выглядит следующим образом:

  • У вас есть метод BeginXXX, который получает олл-ин и ref аргументы плюс делегат AsyncCallback (может быть нулевым) и ссылку на объект состояния (также может быть нулевым) и возвращает IAsyncResult. Этот метод вызывается, чтобы начать вызов, и он немедленно возвращает более или менее.
  • Затем у вас есть метод EndXXX, который принимает IAsyncResult, возвращаемый операцией BeginXXX, плюс любые аргументы ref и out, которые вызываются, когда вызов должен быть завершен (либо после обратного вызова, ожидания на событие в IAsyncResult или путем блокировки). EndXXX вернет результат метода (если не метод void) или выдаст исключение (если метод вызвал исключение).

Посмотрите на класс Stream или любого делегата, они предоставляют вам примеры этих подписей. Также имеется полное описание асинхронных вызовов на MSDN .

0 голосов
/ 06 мая 2009

Шаблон обычно реализуется через порт IOCompletion .NET . Это позволяет небольшому пулу потоков обслуживать многие операции ввода-вывода, завершая, с BeginX вызовом соответствующего Win32 API для инициирования асинхронной операции, реализацию IAsyncResult, содержащую любое состояние (связанное с базовой операцией через OVERLAPPED экземпляр) и EndX получение результата.

Детали (и другие подходы) широко варьируются в зависимости от рассматриваемого ресурса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...