2017-06-22 8 views
-2

Web APIコードからメソッドを非同期で実行したいが、目的の動作が得られていない。Async/Awaitを使用して関数を非同期に実行しようとしましたが、C#を使用していませんか?

私は非同期の方法でLongCallMethodを実行しようとしています。 LongCallMethodが完了する前に、私は自分のユーザーに成功を返すことができます。

私はawaitとasyncでさまざまな呼び出しを試みましたが、まだ成功していません。 私はasync/awaitの概念を正しく理解していないかもしれません。

私は何をしているのか教えていただけますか?

私のコントローラのコードは

[HttpGet("{id}")] 
    public string Get(int id) 
    { 
     PracticeAsync p = new PracticeAsync(); 
     p.LongCallMethod(); 
     return "Success"; 
    } 

の下PracticeAsyncは以下であるクラスのコードです:

public class PracticeAsync 
{ 
    public async Task LongCallMethod() 
    { 
     var x = await CallThis(); 
    } 

    public async Task<dynamic> CallThis() 
    { 
     Thread.Sleep(10000); //DB call 
     return "done"; 
    } 
} 
+4

Thread.SleepをWait Task.Delayに置き換えてください。 – MistyK

+0

非同期メソッドが 'CallMethod'のときに' p.LongCallMethod() 'をなぜ呼び出すのですか? –

+0

私はTask.Delayを使用して希望の動作を得ています。ありがとう@MistyK –

答えて

1

私は非同期な方法でLongCallMethodをやろうとしています。 LongCallMethodが完了する前に、私は自分のユーザーに成功を返すことができます。

That's not how async works

SignalRまたはproper distributed architectureを使用する必要があります。具体的には、Webアプリケーションはその作業を信頼性の高いキューに配置し、そのキューから独立したサービスを読み込んで作業を行う必要があります。 ASP.NETはWeb要求に対応するように設計されており、強制的に他の操作を実行しようとすると厳しい信頼性の制限があります。

関連する問題