2016-12-28 29 views
-1
private bool _secondRequest; 

public async Task<UserModel> RunSomeMethodAsync(UserModel model, bool mode = true) 
{ 
    // Some code here... 

    HttpClient client = new HttpClient(); 

    var response = await client.SendAsync(request);    
    var responseContent = await response.Content.ReadAsStringAsync(); 

    if (responseContent != "[]\r") 
    { 
     return await ProcessThisStringAsync(responseContent); 
    { 
    else if (responseContent == "[]\n" && !_secondRequest) 
    { 
     _secondRequest = true; 
     await RunSomeMethodAsync(model, false) // Run same method, different param 
    } 

    return model.Error = "An error has occurred"; 
} 

明らかに何かが間違っていない限り、これは同期コードを使用して動作するはずです。このバージョンは非同期で実行されますか?私はTask.Delay(1000)を追加することを考えましたが、それはちょっとしたクルージングのようでした。非同期非同期/待機メソッドを再帰的に呼び出す

+0

あなたはそれを並行して実行したいのですか?これはすでに非同期です。 – Rob

+0

私は最初のレスポンスを待っていますが、それは空ではなく、処理して停止します。空の場合は、paramを変更してもう一度実行し、2番目の応答を取得して処理します。 –

+0

それはそれがすることです。私はあなたがモデルを返すべきときに文字列を返すことに気がつきました。(また、それは再帰的に呼び出すためのものです - あなたが 'RunSomeMethodAsync(model、false)'を待つことができます)。あなたはどんな問題を正確に実行していますか?これは、コンパイルエラーが解決されたら、あなたが言うように正確に行います – Rob

答えて

2

このバージョンは非同期で実行されますか?

はい。

私はTask.Delay(1000)を追加すると思っていましたが、それはちょっとクルージュのようでした。

ええ、そうしないでください。 に何らかの理由で(リモートサービスのレート制限のような)がある場合を除きます。

+0

ねえ、良いキャッチ...私はリモートサービスが私を制限していたことを発見したので、私は問題を抱えていた。それを遅くする必要があるが、非同期コードをそのまま残す必要がある。 –

0

明らかに何かが間違っていない限り、これは同期して動作するはずです。

同期して動作しません。なぜと同期するのですか?メソッド自体は非同期で、awaitです。これは非同期操作です。

非同期に実行するにはどうすればよいですか?

あなたが何をしているのですか?

+0

私はワークフローの同期バージョンが機能することを意味しました。私は非同期バージョンがどうなるか少し気になりました。 –

+0

@FredChateauどのようなワークフローですか?そして、なぜそれは同期して動作するのでしょうか? – Servy

+0

すべての非同期コード(async/await)を削除すると、同期して実行されるものが実行されます。 1つのステップがどのように発生するかを少なくとも理解したり、少なくとも可視化したりするのがやや簡単です。その後、ステップ1の完了後に次のステップが続きます。最初のリクエストが完了するまで2番目のリクエストを開始するのを待っていないのではないかと心配していたので、私は待っている気持ちがよくないと思います。そして、それは私が持っていた問題でした。 2番目のリクエストは非常に早く開始され、リモートサービスによってブロックされました。これは非同期コードの効率性を賞賛します。 –

関連する問題