【发布时间】:2018-05-07 07:49:34
【问题描述】:
在我的主线程代码中,我调用了第 3 方 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;
}
谢谢
【问题讨论】:
-
垃圾收集器不会杀死任务 -> 如果确实如此,那么我敢打赌任务被编码为“错误”
-
i suppose that when main Thread finish, garbage collector kills all my other tasks that run in background.这不是正常行为。 -
代码不完整。你只创建了一些任务,但你没有开始或等待任何东西。这确实需要minimal reproducible example。
-
请让您的代码更具可读性,标识和括号很难阅读此代码
-
main线程是什么意思?它是你的主进程线程吗?
标签: c# multithreading asynchronous garbage-collection async-await