在过程结束之前未完成任务



在我的代码中,我称为第三方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);
}

最新更新