.NET 4.5(C#):關於Task的未覺察異常的更新

來源:互聯網
上載者:User

曾經寫過一篇文章:

.NET(C#) TPL:Task中未覺察異常和TaskScheduler.UnobservedTaskException事件

 

講述在.NET 4.0中,Task的未覺察狀態的異常會在記憶體回收時終結器執行線程中被拋出,像其他未處理異常一樣,這個異常會使整個進程崩潰。而在.NET Framework 4.5 beta後,這個有所改變,這個未覺察的異常不會引發進程崩潰。

 

所以下面在.NET Framework 4.0中會發生異常的代碼在.NET Framework 4.5 beta中不會發生異常。

//在Task中拋出異常

Task.Factory.StartNew(() =>

{

    throw new Exception();

});

 

//確保任務完成

Thread.Sleep(100);

//強制垃圾會受到

GC.Collect();

//等待終結器處理

GC.WaitForPendingFinalizers();

 

 

當然如果想在.NET Framework 4.5 beta中維持.NET Framework 4.0的做法,可以在應用程式設定檔中把運行時刻的ThrowUnobservedTaskExceptions設定成True(預設當然是False)就可以了。

<configuration>

    <runtime>

        <ThrowUnobservedTaskExceptions enabled="true"/>

    </runtime>

</configuration>

 

 

在運行上面的代碼,異常會再次被拋出並引發進程崩潰。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.