C#没有等待异步方法完成

时间:2015-06-03 17:43:31

标签: c# multithreading parallel-processing

我的代码中有一个特定的位置,我在那里发送电子邮件。嗯,等待这个方法完成并不重要,这只是一个应该在不久的将来发生的任务,但不一定是现在。

我想知道这是否安全:

// some stuff here...

Task.Run(SendEmail);

// and here too... but don't wait for the email to be sent, just go!!

这样好吗?这种方法总是会被执行吗?它不会导致任何线程阻塞问题,它会不会(假设该方法本身是线程安全的)?

此外,运行此类任务的好方法是什么?打电话会不会更好:

SendEmail();

如果此方法为async

public static async Task SendEmail()

1 个答案:

答案 0 :(得分:3)

是的,该方法只是'运行'。除非在该方法中引发异常,否则不会阻止该方法无法成功执行。

如果您想在完成所有工作后知道任务的状态,只需从Task方法获取Task.Run实例,然后检查其状态(您要等待访问它之前的任务以检查它是否成功结束)。例如,您可以查看Task.Exception属性。