2017-11-05 3 views
-1

を形成する)これら2つのコードラインの違いは何ですか?C#4.5タスクの並列は、私はすべてのメソッドは非同期であり、私はいくつかの質問</p> <p>1を持っているサードパーティのライブラリを持っている

Task.Run(async() => await MethodAsync()); 
Task.Run(() => PrepareDashBoard()); 

2)ボタンクリックイベントから非同期メソッドを呼び出す必要があるときは、どちらですか?

// A. 
private void Button_Click(object sender, EventArgs e) 
{ 
    //A Task Run call from questions 1) a or b with call to Wait or Result (if return something) 
} 

// B 
private async void Button_Click(object sender, EventArgs e) 
{ 
    await MethodAsync(); 
} 
+0

あなたの質問には、文書と重複したもので完全に答えられます。 –

答えて

1

TL; DR:あなたは意味合いがasyncawaitasync関数の戻り値の型の定義以外)とタスク並列ライブラリー(Task<T>など)を使用して直接混合しないでください理解するまで。ただ

var res = await theFunction(args); 

にWinFormsのランタイムを使用しても、ハンドラのWinFormsずに非同期関数を呼び出すには

は(ので、すべてのGUIの相互作用は、一つのスレッドに滞在)スレッド管理を処理する方法を知っています。

Re。 Q1:

a。新しい非同期タスクを起動して非同期に非同期メソッドを呼び出し、内部タスクの実行が開始されると完了します。これはあなたが望むものであることはほとんどありません。

b。非同期タスクでラムダを実行すると、ラムダが完了するとタスクは完了とマークされます。

PS。 C#5が立ち上げられたとき、asyncとWinFormsのインタラクションをカバーする多くの記事がここでの回答よりもはるかに詳細になっています。

+0

これら2つのコード行の違いは何ですか?コードラインは 'Task.Run(async()=>待っているMethodAsync());' 'Task.Run(()=> PrepareDashBoard());'そして、私が正しいと理解すれば、 Task.Runをasyncで直接ミックスして待ちますか? –

+0

待たずに非同期メソッドを実行する正しい方法は何ですか? –

+0

@ManosKanellopoulos:それは複雑です( 'Task 'の 'Result'プロパティを使う単純なケースは実行コンテキスト(IIRC)を処理しません)。したがって、ドキュメントを見つけてそれらを読んでください。 – Richard

関連する問題