【C#】Thread.Sleep和Task.Delay有什么區(qū)別
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
1. |
Thread.Sleep | Task.Delay | |
---|---|---|
是否阻塞線程 | ||
適用場景 | ||
基于 | Task ) | |
是否釋放線程資源 | ||
是否支持取消 | CancellationToken | |
性能影響 | ||
UI 應用程序中的影響 |
Thread.Sleep
的使用場景在控制臺應用程序中,用于簡單的延遲。
在后臺線程中執(zhí)行長時間運行的任務時,用于模擬延遲。
在不關心線程阻塞的場景中。
Task.Delay
的使用場景在 UI 應用程序中,用于異步延遲操作,避免阻塞 UI 線程。
在異步編程中,用于模擬異步操作的延遲。
在需要支持任務取消的場景中(結合 CancellationToken
)。
Thread.Sleep
示例void DoWork()
{
Console.WriteLine("開始工作");
Thread.Sleep(5000); // 阻塞當前線程 5 秒
Console.WriteLine("工作完成");
}
Task.Delay
示例async Task DoWorkAsync()
{
Console.WriteLine("開始工作");
await Task.Delay(5000); // 異步等待 5 秒,不會阻塞線程
Console.WriteLine("工作完成");
}
Task.Delay
的額外功能Task.Delay
支持 CancellationToken
,可以用于取消延遲任務。例如:
async Task DoWorkAsync(CancellationToken cancellationToken)
{
Console.WriteLine("開始工作");
try
{
await Task.Delay(5000, cancellationToken); // 支持取消
Console.WriteLine("工作完成");
}
catch (TaskCanceledException)
{
Console.WriteLine("工作被取消");
}
}
Thread.Sleep
:適用于同步編程,會阻塞當前線程,不適合 UI 應用程序。
Task.Delay
:適用于異步編程,不會阻塞線程,適合 UI 應用程序和需要高并發(fā)性的場景。
在 WinForms、WPF 或其他 UI 應用程序中,優(yōu)先使用 Task.Delay
,以避免阻塞 UI 線程,保持界面響應性。
閱讀原文:原文鏈接