2

こんにちは、皆さんの助けが必要です。

次のようにメインメソッド内で新しいタスクを宣言しました。

   static void Main(string[] args)
   {    
       Task firstTask = Task.Factory.StartNew(()getPackage(packageId));
       Task secondTask=firstTask.ContinueWith((_=>UpdatePackage(myPackage)));       
   }

私の問題は、タスクがアクションを完了する前にメインスレッドが終了することです。メインスレッドを終了する前に、タスクがそのアクションを完了するのをどのように待つべきですか?

4

3 に答える 3

3

これに対処するための代替パラダイムを使用できます。

static void Main(string[] args)
{
    MainAsync().Wait();
}
static async Task MainAsync()
{
    Task firstTask = new Task(()=>getPackage(packageId));
    firstTask.ContinueWith(()=>UpdatePackage(myPackage)));
    await firstTask.Run();
}

このように非同期コードと同期コードを混在させる場合は注意してください。ただし、目的によっては問題なく動作するはずです (これが winforms または WPF の場合、UI スレッドへのメッセージングについて心配する必要があるかもしれませんが、ここでは関係ありません。

于 2015-07-23T00:39:43.273 に答える
1

タスクを Thread に割り当ててから、作成されたスレッドの .Join() 関数をメイン呼び出しで呼び出します (もちろん開始された後)。そうすれば、アプリケーションはタスクが終了するまで待機してから終了します。

このソリューションは Console.ReadLine よりも複雑ですが、質問が終了する前でも後でもなく、終了することができます。

于 2015-07-23T00:35:27.923 に答える