【发布时间】:2018-11-26 21:45:42
【问题描述】:
我正在使用 ASP.NET。当我运行一个新任务时,该任务将在什么时候终止?当调用它的线程终止时它会终止吗?还是会一直运行到我的 lambda 表达式中的代码运行完毕?
这是我正在尝试做的一个示例:
Task.Run(() =>
{
try
{
MyFunction();
}
catch (Exception ex)
{
Console.Write(ex);
}
});
MyFunction() 不返回任何内容,我只是希望它自己开始运行,以便当前线程可以继续。当我运行我的应用程序并调用此代码时,它似乎工作得很好。我只是想看看我是否应该担心任务会自发终止,或者我是否会没事。
我还应该提到,发出请求的线程可能会在任务完成之前终止。
谢谢。
【问题讨论】:
-
请永远不要写
catch (Exception ex)- 这就像糟糕的反模式。阅读Eric Lippert's Vexing Exceptions。 -
@Enigmativity 这篇文章很棒!其实我以前读过。我有这样的异常处理只是为了表明我正在尝试捕获,我不想透露任何特定于我的代码库的内容,因为这是我在工作中正在做的事情。
-
这是一种设计选择。监视线程是否有错误是一种很好的做法,有多种方法可以做到这一点,但这不是必需的。如果您对自己的方法有信心,那么就照原样去做吧;可能会添加一些日志记录。就任务而言;这将在您的应用程序终止时终止,否则无论范围如何,它都会继续运行。
-
@TheGeneral 并不是说,我觉得 OP 是在询问线程是继续还是在范围内死亡。一个任务,例如这个任务,只要它在范围内或被引用,就会一直存在,它运行的线程(如果它创建一个)将一直运行到代码完成或应用程序结束。在这种情况下,可能的线程和任务都结束了。
标签: c# asp.net multithreading task