为什么不调用这个C#4.0异步方法?

Avr*_*oel 5 c# action asynchronous begininvoke

我正在尝试写一个非常简单的异步代码.我有一个void方法,它不接受任何参数,这些参数是从Windows服务调用的.我想把它打开异步,这样服务就不必等待方法完成了.

我创建了一个非常简单的测试应用程序,以确保我正在编码正确,但异步方法只是没有被调用.任何人都能看到我做错了什么?我顺便使用.NET 4.0,所以我不能使用await(这会更简单!).

这是我的整个测试样本......

using System;
using System.Threading;

namespace AsyncCallback {
  internal class Program {
    private static void Main(string[] args) {
      Console.WriteLine(DateTime.Now.ToLocalTime().ToLongTimeString() + " - About to ask for stuff to be done");
      new Action(DoStuff).BeginInvoke(ar => StuffDone(), null);
      Console.WriteLine(DateTime.Now.ToLocalTime().ToLongTimeString() + " - Asked for stuff to be done");
    }

    private static void StuffDone() {
      Console.WriteLine(DateTime.Now.ToLocalTime().ToLongTimeString() + " - Stuff done");
    }

    private static void DoStuff() {
      Console.WriteLine(DateTime.Now.ToLocalTime().ToLongTimeString() + " - Starting to do stuff");
      Thread.Sleep(1000);
      Console.WriteLine(DateTime.Now.ToLocalTime().ToLongTimeString() + " - Ending doing stuff");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你提供的所有帮助.

spe*_*der 6

您的程序在异步方法部署之前终止ThreadPool.保持你的程序开放一点.也许Console.ReadKey()在年底Main


Ser*_*rvy 5

只要没有未完成执行的前台线程,任何应用程序都将结束.如果有任何后台线程,他们将不会保持进程"活着".

因为您在后台启动异步任务,并且没有任何东西使前台线程保持运行,所以整个过程都将退出.

您需要在前台线程中运行异步任务(BeginInvoke据我所知,这不能完成,您需要Thread显式创建新的)或者执行其他操作来阻止主线程直到完成.