在我的代码中,我称为第三方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;
}
谢谢
如果要等待所有任务完成,则必须收集它们并等待它们。因为当您的过程结束时,这通常是一切的终结。
var tasks = List<Task>();
for (int i = 0; i < 1000; i++)
{
var demo = new AsyncAwaitTest();
tasks.Add(demo.DoStuff1(guid));
tasks.Add(demo.DoStuff2(guid));
}
// before your process ends, you need to make sure all tasks ave finished.
Task.WaitAll(tasks.ToArray());
您还拥有 2 粗心度的水平(这意味着您开始任务并且不在乎它是否完成)。您也需要删除第二个:
public async Task DoStuff1(string guid)
{
await DoSomething1(guid);
}