2017-02-02 5 views
-1

У меня есть метод web api, который должен вызывать 2 асинхронный метод от другой стороны, а результат первого асинхронного метода требуется для вызова второго метода асинхронного вызова , У меня что-то похожее на приведенный ниже код, который, очевидно, не работает с ключевым словом await, я понимаю, что он перейдет к следующей строке и продолжит и в то же время вернет объект Task вызывающему.Как вызвать взаимосвязанный метод async в методе web api

Краткое описание того, что мне нужно от этого метода, заключается в том, что мне нужно получить токен от стороннего метода асинхронизации, после этого, основываясь на токене, мне нужно сделать что-то, а затем использовать токен снова вызовите другой метод aysnc от третьего лица.

  public async Task<ResponseObj> DoSomething() 
      { 
       var token = await GetTokenAsync(); 

       DoStuff1(); 

       var stuff = await CreateStuff(token); 

       SaveStuff(stuff); 

       ResponseObj response = new ResponseObj(stuff); 

       return response; 

      } 

Я прочитал несколько статьи и пример в Интернете и некоторые люди говорят, что вместо ЖДУТ, я могу использовать Task.Result так, что следующий вызов в зависимости не будет работать, пока задача вернуть результат, некоторые люди используйте Task.Wait и, похоже, он будет ждать завершения задачи. Я пробовал оба и не смог достичь ожидаемого результата, который CreateStuffAsync не может запустить, пока у меня не получится результат GetTokenAsync.

Может кто-нибудь указать, что я сделал неправильно? Предположим, если первое ожидание уже возвращает задачу вызывающему, тогда что произойдет, когда будет достигнута вторая ожидание? Должен ли я не иметь больше 1 ожидания в методе, особенно когда один полагается на другой?

+0

Пожалуйста, добавьте «код ниже». – JohanP

+0

сделано, извините, я форматировал код, чтобы его можно было отобразить правильно. – qualizon

+0

Вы действительно протестировали код, чтобы узнать, что это действительно сделает то, что вы хотите? – Servy

ответ

0

Этот код является правильным в том смысле, что он ждет первого вызова async, получения результата, а затем продолжения со вторым вызовом async.

Смежные вопросы