簡単に言えば、FirstBool と SecondBool という 2 つのブール変数があります。2 つのデリゲートを使用して 2 つのメソッドを非同期的に実行するプログラムがあります。Console.ReadLine()
子スレッドの実行中に親スレッドを維持するために使用しています。
最初のメソッドが完了すると、FirstBool が true に設定されます。2 番目のメソッドが完了すると、SecondBool が true に設定されます。
簡単に言えば、イベントを「両方とも真」FirstBool
と定義し、この時点でプログラムを終了したいと思います。SecondBool
これに代わる唯一の方法は、両方のブール値が真になるまでポーリングしてからプログラムを閉じることです。ポーリングは最悪です。
私のコードは以下の通りです:
class Program
{
private delegate void MyDelegate();
private static bool FirstBool { get; set; }
private static bool SecondBool { get; set; }
static void Main(string[] args)
{
FirstBool = false;
SecondBool = false;
MyDelegate firstDelegate = new MyDelegate(FirstMethod);
MyDelegate secondDelegate = new MyDelegate(SecondMethod);
AsyncCallback myCallback = new AsyncCallback(CallbackMethod);
firstDelegate.BeginInvoke(myCallback, "Zip");
secondDelegate.BeginInvoke(myCallback, "Line");
Console.ReadLine();
}
private static void CallbackMethod(IAsyncResult result)
{
switch (result.AsyncState.ToString())
{
case "Zip":
FirstBool = true;
break;
case "Line":
SecondBool = true;
break;
}
Console.WriteLine("Callback Method");
}
private static void FirstMethod()
{
Console.WriteLine("First Method");
}
private static void SecondMethod()
{
Console.WriteLine("Second Method");
}
}
要するに、定義が「FirstBool
真であり、真である」というイベントを作成し、SecondBool
このイベントの発生に対してメソッドを実行するにはどうすればよいですか?
ありがとう