c# - 正确退出使用 .NET 4.0 任务的 .net 控制台应用程序

标签 c# .net multithreading c#-4.0 task-parallel-library

我有一个基本上看起来像这样的控制台应用程序

class Program
{
    static void Main(string[] args)
    {
        DoStuffService svc = new DoStuffService();
        svc.Start();
    }
}


class DoStuffService
{
    public void Start()
    {
        Task.Factory.StartNew(() => { LongRunningOperation() });
    }

    private void LongRunningOperation()
    {
        // stuff
    }    
}

目前确保我的控制台应用程序在 LongRunningOperation() 完成之前不退出的最佳方法是什么,并且还允许我在控制台应用程序中得到通知(用于记录目的instance) LongRunningOperation() 完成。

最佳答案

在任务上调用Wait()。例如:

class Program
{
    static void Main(string[] args)
    {
        DoStuffService svc = new DoStuffService();
        svc.Start();
        // stuff...
        svc.DelayTilDone();
    }
}


public class DoStuffService
{
    Task _t;
    public void Start()
    {
        _t = Task.Factory.StartNew(() => { LongRunningOperation(); });
    }

    public void DelayTilDone()
    {
        if (_t==null) return;
        _t.Wait();
    }

    private void LongRunningOperation()
    {
        System.Threading.Thread.Sleep(6000);
        System.Console.WriteLine("LRO done");
    }
}

关于c# - 正确退出使用 .NET 4.0 任务的 .net 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5922887/

相关文章:

C# - 用另一个数组分割数组

c# - 使用现有API的.Net中事件的线程上下文是什么?

c# - WPF ItemsCollection.ItemContainerGenerator 的可能竞争条件

c# - 带有 lambda 和 MySQL 的简单 EntityFramework 抛出异常?

java - Java中的Mysql。如何实现高效的异步查询?

c# - 有人可以解释一下这个涉及 'passing by output' 概念的 C# 代码的逻辑吗?

c# - 如何使用 Audit.Net 扩展 Audit.Mvc 设置 AuditEvent 的目标对象

java - 第一次运行后 scheduleAtFixedRate 不执行

C# MVC 模式帮助

c++ - Boost线程、Posix线程和STD线程,为什么它们提供不同的性能?