メインスレッドの私のコードで私はサードパーティAPIを呼び出します。 APIの結果ごとに、私は2つの非同期タスクを呼び出します。場合によってはすべてが完璧に動作することもあります。メインスレッドが終了すると、ガベージコレクタはバックグラウンドで実行される他のすべてのタスクを強制終了します。メインスレッドが終了したときにガベージコレクタにバックグラウンドサービスを強制終了させないように指示する方法はありますか?タスクがプロセス終了前に終了していない
コードはこのようなものです:あなたが完了するすべてのタスクを待ちたい場合
for (int i = 0; i < 1000; i++)
{
var demo = new AsyncAwaitTest();
demo.DoStuff1(guid);
demo.DoStuff2(guid);
}
public class AsyncAwaitTest
{
public async Task DoStuff1(string guid)
{
await Task.Run(() =>
{
DoSomething1(guid);
});
}
public async Task DoStuff2(string guid)
{
await Task.Run(() =>
{
DoSomething2(guid);
});
}
private static async Task<int> DoSomething1(string guid)
{
// insert in db or something else
return 1;
}
private static async Task<int> DoSomething2(string guid)
{
// insert in db or something else
return 1;
}
おかげ
ガベージコレクタがタスクを殺さない - >それは、私は賭けタスクが、私はそのメインスレッド仕上げ、ガベージコレクタのキルを想定 ' – EpicKip
「間違った」コード化されない場合すべての私の他のタスクはバックグラウンドで実行されます。これは正常な動作ではありません。 – Stefan
コードが不完全です。いくつかのタスクを作成するだけですが、何も開始したり待ったりしません。これには本当に[mcve]が必要です。 –