2017-10-24 8 views
2

私はいくつかの非同期C#コードを書こうとしていますが、async.Wait()のリソースを理解するのに少し問題があります。私はスレッドやウェブサイトの多くを読んだことがありますが、どういうわけか、どうやって待ってはいけないのかわからないのです。完了する#1のためのいくつかの仕事 非同期コードと同期コードの境界を扱う?

  • 待ちを行い、何か非同期
  • キックオフ
    1. :私のプログラムの目標は、これです。
    2. 私が持っているタスクと

    のために完全であると#1を必要とし、より多くの仕事ですか:非同期を使用して、私の知る限り

    public static void Main() 
    { 
        Task t = DoWork(); 
        DoMoreWork(); 
        t.Wait(); 
        DoWorkThatNeedsT(); 
    } 
    
    public Task DoWork() 
    { 
        return Task.Run(() => {Thread.Sleep(1000);}); 
    } 
    

    を、このインスタンスで待つだけ(DoWorkを変更する必要)を次のように変更します。

    public async Task DoWork() 
    { 
        return await Task.Run(() => {Thread.Sleep(1000);}); 
    } 
    

    次に、私は依然として呼び出しメソッドに.Wait()を持っています。スレッドレス非同期のメリットを得るはずですか?これを実装する別の方法はありますか?

  • +0

    非同期で何をしていますか?さもなければ、非同期の使用には何の意味もありません。また、 'Task.Run()'は解決策ではありません。何の理由もなく別のスレッドを起動します。 –

    +0

    task.runにあったものはすべて非同期で実行されます。この場合、ちょっと寝ているだけです。実際のプログラムでは、いくつかのファイルを削除して外部プログラムを実行しています。 – user2460953

    +2

    次に、async/awaitは必要ありません。あなたが何を記述しているかは、使用するものではありません。代わりに、バックグラウンドのworker/task.runを使用します。私は以下で説明します。 –

    答えて

    2

    説明した内容は、async/awaitが使用されているものではありません。 Async/awaitは、システムが制御できないもの(たとえば、リモートシステム上でSQL文が完了するのを待つ)を待っている間に、他のシステムが使用するオペレーティングシステムにスレッドを戻すために使用されます。

    あなたが望むのは、他のコードと並行してタスクを実行することです。 Task.Runを使用してください。あなたは本当に待っているものがないので、async/awaitについて心配する必要はありません。

    Stephen Cleary - There is no threadは、いつasync/awaitを使用するかを理解するのに最適です。

    関連する問題