シンプルなコードを使って、C#でメソッドを非同期的に呼び出す方法を理解しようとしています。非同期に同期メソッドを呼び出す
私は私が私が通常(同期)を実行したい第2の機能機能2を持っているそして、非同期
static void Function1(out int threadId)
{
Console.WriteLine("I'm inside Function 1. Going to sleep for 7 seconds...");
Thread.Sleep(7000);
Console.WriteLine("I'm awake now");
threadId = Thread.CurrentThread.ManagedThreadId;
}
を実行したい機能1と呼ばれる機能も
static void Function2()
{
Thread.Sleep(3000);
Console.WriteLine("I'm inside Function 2");
}
Iを持っていますFunction1と同じメソッドシグネチャを持つデリゲートを作成しました。
delegate void AsyncMethodCaller(out int threadId);
そしてここでは、私のメインの呼び出し方法であって、私のメインの方法では
static void Main(string[] args)
{
int threadId;
AsyncMethodCaller caller = new AsyncMethodCaller(Function1);
caller.BeginInvoke(out threadId, null, null);
Function2();
}
、私は機能1が非同期に実行を開始することを期待。 を待たずに終了すると、Function2が実行されます。だから私は、次の出力を期待:
目を覚ましてよ私は7 秒間寝る非同期機能1.内部のよ...
私は機能2
内だ私は今
代わりに、私は次の出力を得る:私は機能2
内だ...私は7 秒間寝る非同期機能1.内側だ
を
なぜ私の期待は現実と異なるのですか?なぜ私は目が覚めているのですか?
は、.NETのための基本的なプロセスの有効期間のルールがすべてフォアグラウンドスレッドが終了したときに、プロセスが終了することにしているあなたに
メイン – MickyD
が@MickyDに同意する前に、Function1が完了するのを待つことがないためです。 –
メソッドを非同期に呼び出すたびにデリゲートを作成する必要がありますか? – IsaacBok