非同期関数を呼び出して非同期に実行することはできません。関数の署名にasync
キーワードを追加し、非同期呼び出しが行われている行にawait
キーワードを追加する必要があります。
関数シグニチャのasync
キーワードは、この関数を非同期対応機能にします。
await
キーワードは、アプリケーションの実行を停止し、戻り値を返し、async関数が完了するまで待機します。完了すると、それはawait
行に戻り、実行を続けます。ここで
はここで素敵なMSDN article on Asynchronous programming in C#
あるのは、私は非同期的にウェブからのデータを取得する機能を持っているとしましょうが、私は、私が呼び出したときにUIをロックしたくない例えばMSDN Blog entry on Parallel Programming in .NET
ですそれ。
private string GetWebData(){
return MyWebRequests.GetWebDataAsync();
}
私はC#の非同期パターンを実装しておりませんので、現在、私のGetWebData()
関数は同期的に実行されます。
これを非同期で実行するには、2つのキーワードを追加する必要があります。 async
およびawait
である。
private async string GetWebData(){
return await MyWebRequests.GetWebDataAsync();
}
これは、何をやっている停止し、その後、のawaitキーワードまで実行するために私たちのアプリケーションを教えてくれた場所をマークし、機能を終了します。待機している操作の実行が終了すると、アプリケーションはそのマークされた場所に戻り、処理を続行します。
まだ完了していません。もう1つ追加する必要があります。この非同期操作で何かを返すので、タスクを返す必要があります。この例では、タスクが必要です。あなたが何かを返さないならば、それを無効にすることができます。
private async Task<string> GetWebData(){
return await MyWebRequests.GetWebDataAsync();
}
これだけです!
ここでコードを見てみましょう。
private async void ProcessAccept(SocketAsyncEventArgs e)
{
e.Completed += new EventHandler<SocketAsyncEventArgs>(Accept_Completed);
e.AcceptSocket = null;
bool waitFlag = await listeningSocket.AcceptAsync(e);
if (!waitFlag)
{ //operation completed synchronously
Accept_Completed(null, e);
}
}
これは非同期機能ではありませんが、System.Net.Sockets.Socket.AcceptAsync組み込み関数であり、それは待たれません! https://docs.microsoft.com/lv-lv/dotnet/api/system.net.sockets.socket.acceptasync – Arvis
おそらく、なぜ彼らは答えを受け入れなかったのでしょう。あなたが解決策を持っているなら、私はいつも学びたいと思っています。答えをアップアップします。これを明確にしてくれてありがとう。 –