【问题标题】:What is happening with task if I close application C#如果我关闭应用程序 C#,任务会发生什么
【发布时间】:2016-09-23 09:19:14
【问题描述】:

背景:我运行一个应用程序,其任务是在无限循环中打印“任务 + 编号”。我想知道当我关闭应用程序时任务发生了什么以及我如何看待它。

我的示例,我用它来查看运行任务:

//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);
    }
}

【问题讨论】:

  • 我认为如果你关闭整个应用程序,任务就会被杀死。
  • 任务被杀死。线程属于进程。

标签: c# task backgroundworker


【解决方案1】:

您的申请是一个过程。进程是线程的父级。进程还管理内存。因此,线程(任务)及其内存属于进程。如果应用程序(进程)关闭,它将删除其所有子项。任务被终止,内存被释放。

【讨论】:

    【解决方案2】:

    任务将中止,您的应用程序将关闭。就是这样。

    调用代码可能会进行一些更改以进行清理,但这一切都取决于应用程序的关闭状态(它是否崩溃)。

    附带说明:切勿在 Task 中使用 Thread.Sleep。如果任务在同一个线程上执行,可能会导致死锁。使用await Task.Delay

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多