2015-06-03 93 views
0

我在代碼中有一個特定的地方,我正在發送一封電子郵件。那麼,在這裏等待這個方法完成並不重要,這只是一個應該在不久的將來發生的任務,但不一定是現在。C#沒在等待異步方法完成

我想知道這是否是安全的:

// 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() 
+0

不可能回答這是否會導致阻塞。 「SendEmail」方法以及您與之共享的任何數據都是線程安全的嗎? –

+0

這是一個靜態方法,沒有連接任何東西。它只是在自己的範圍內創建一些東西,並向外部服務器發送請求。 –

+0

如果你發佈SendEmail方法的聲明 –

回答

3

是的,該方法將'運行'。除非在該方法中引發異常,否則不會阻止該方法無法成功執行。

如果您想在完成所有工作後知道任務的狀態,只需從Task.Run方法中獲取Task實例,然後檢查它的狀態(您希望在訪問它之前等待該任務以檢查如果它成功結束)。例如,您可以檢查Task.Exception屬性。

+0

請問如果使用#pragma warning禁用CS4014是個好主意? –

+1

不,它不是。解決編譯器警告中的[this](https://msdn.microsoft.com/en-us/library/hh873131.aspx)解釋問題(我會選擇#2)。 –