如果我关闭应用程序 C#,任务会发生什么
What is happening with task if I close application C#
背景:我 运行 一个应用程序,其任务在无限循环中打印 'task + number'。我想知道当我关闭应用程序时任务发生了什么以及我是如何看待它的。
我的示例,我用它来查看 运行 任务:
//delegate to pring text in label
private delegate void SetTextToControlDelegate(string text, Control control);
private void SetTextToControl(string text, Control control)
{
if (control.InvokeRequired)
{
SetTextToControlDelegate deleg =
new SetTextToControlDelegate(SetTextToControl);
this.Invoke(deleg, new object[] { text, control });
}
else
{
control.Text = text;
}
}
//run a task
private void Run()
{
Task.Factory.StartNew(() =>
{
int i = 0;
while (true)
{
Thread.Sleep(1000);
i++;
string result = "task " + i.ToString();
SetTextToControl(result, label1);
}
});
}
//button to run task
private void button1_Click(object sender, EventArgs e)
{
try
{
Run();
}
catch (Exception ex)
{
SetTextToControl(ex.Message,label1);
}
}
任务将中止,您的应用程序将关闭。就这些了。
调用代码可能会进行一些更改以进行清理,但这完全取决于应用程序的关闭状态(是否崩溃)。
附带说明:切勿在 Task
中使用 Thread.Sleep
。如果任务在同一线程上执行,则可能会导致死锁。使用 await Task.Delay
.
您的应用程序是一个进程。进程是线程的父进程。进程还管理内存。所以,线程(任务)及其内存属于进程。如果应用程序(进程)关闭,它会删除它的所有子进程。任务被杀死,内存被释放。
背景:我 运行 一个应用程序,其任务在无限循环中打印 'task + number'。我想知道当我关闭应用程序时任务发生了什么以及我是如何看待它的。
我的示例,我用它来查看 运行 任务:
//delegate to pring text in label
private delegate void SetTextToControlDelegate(string text, Control control);
private void SetTextToControl(string text, Control control)
{
if (control.InvokeRequired)
{
SetTextToControlDelegate deleg =
new SetTextToControlDelegate(SetTextToControl);
this.Invoke(deleg, new object[] { text, control });
}
else
{
control.Text = text;
}
}
//run a task
private void Run()
{
Task.Factory.StartNew(() =>
{
int i = 0;
while (true)
{
Thread.Sleep(1000);
i++;
string result = "task " + i.ToString();
SetTextToControl(result, label1);
}
});
}
//button to run task
private void button1_Click(object sender, EventArgs e)
{
try
{
Run();
}
catch (Exception ex)
{
SetTextToControl(ex.Message,label1);
}
}
任务将中止,您的应用程序将关闭。就这些了。
调用代码可能会进行一些更改以进行清理,但这完全取决于应用程序的关闭状态(是否崩溃)。
附带说明:切勿在 Task
中使用 Thread.Sleep
。如果任务在同一线程上执行,则可能会导致死锁。使用 await Task.Delay
.
您的应用程序是一个进程。进程是线程的父进程。进程还管理内存。所以,线程(任务)及其内存属于进程。如果应用程序(进程)关闭,它会删除它的所有子进程。任务被杀死,内存被释放。