2013-07-02 2 views
0

У меня есть веб-сервиса и эту конкретную функцию:Ожидание до завершения асинхронного метода. (Функция, возвращающая IAsyncResult)

IAsyncResult func(object signature, AsyncCallback callBack, object asyncState) 

Я могу понять, что единственная цель использования AWAIT не блокировать пользовательский интерфейс, а очень долго происходит операция , а также его имеет некоторую функцию обратного вызова, которая может быть использована для выполнения результатов «func»

В моем случае я должен ждать (должен ждать), пока не получу результат func.

Любые предложения, как я должен ждать, пока я получаю результат FUNC (другими словами, просто болтаться, пока я не получаю результат)

EDIT:

Почему я должен это делать?

Я просто хочу проверить, имеет ли подпись особый тип. Если это так, функция прекращает выполнение и возвращает 0. Это единственная функция, которую я требую от func и не вижу смысла определять метод обратного вызова и объект состояния.

+0

Должен ли я использовать WaitOne? –

+0

Вам не нужно ждать. Есть ситуации, когда кажется, что вам нужно подождать. Опишите вашу ситуацию, и мы поможем вам найти альтернативу ожиданию. –

ответ

5

Что вы описываете, это асинхронная модель программирования, которая предшествует задачам и широко используется в .NET до версии 3.5. Это модель, используемая всеми парами методов BeginXXX/EndXXX.

Задачи convert APM calls to TPL с использованием метода FromAsync. Следующий пример приведен из документации и создает задачу из методов FileStream BeginRead и EndRead.

BeginRead имеет сигнатуру аналогичную FUNC:

IAsyncResult BeginRead(byte[] array,int offset, 
    int numBytes, 
    AsyncCallback userCallback, 
    Object stateObject) 

Вы можете преобразовать его в задаче, как это:

Task<int> task = Task<int>.Factory.FromAsync(
     fs.BeginRead, fs.EndRead, data, 0, data.Length, null); 

После того, как у вас есть задача, вы можете ждать его:

var bytes = await Task<int>.Factory.FromAsync(
     fs.BeginRead, fs.EndRead, data, 0, data.Length, null); 
Смежные вопросы