C# 不等待异步方法完成
C# not waiting for an async method to finish
我的代码中有一个特定的位置,我要在其中发送电子邮件。嗯,在这里等待这个方法完成并不重要,这只是一个应该在不久的将来发生的任务,但不一定是现在。
我想知道这是否安全:
// 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()
是的,该方法将 'run'。除非在该方法中引发异常,否则没有什么可以阻止该方法无法成功执行。
如果你想知道所有工作完成后任务的状态,只需从 Task.Run
方法中获取 Task
实例,然后检查它的状态(你想await 任务,然后再访问它以检查它是否成功结束)。例如,您可以检查 Task.Exception
属性。
我的代码中有一个特定的位置,我要在其中发送电子邮件。嗯,在这里等待这个方法完成并不重要,这只是一个应该在不久的将来发生的任务,但不一定是现在。
我想知道这是否安全:
// 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()
是的,该方法将 'run'。除非在该方法中引发异常,否则没有什么可以阻止该方法无法成功执行。
如果你想知道所有工作完成后任务的状态,只需从 Task.Run
方法中获取 Task
实例,然后检查它的状态(你想await 任务,然后再访问它以检查它是否成功结束)。例如,您可以检查 Task.Exception
属性。