async void DDAsync()
{
Logger.Debug("1-async");
Task<bool> task = Task.Run(() =>
{
Logger.Debug("2-async");
System.Threading.Thread.Sleep(9999);
Logger.Debug("3-async");
return true;
});
Logger.Debug("4-async");
bool result = await task; // 当前线程不会进入阻塞,当前方法后续代码以ContinueWith执行实现代替阻塞
Logger.Debug($"async_result={result}");
Logger.Debug("5-async");
}
void DDSync()
{
Logger.Debug("1-sync");
Task<bool> task = Task.Run(() =>
{
Logger.Debug("2-sync");
System.Threading.Thread.Sleep(9999);
Logger.Debug("3-sync");
return true;
});
Logger.Debug("4-sync");
bool result = task.Result; // 当前线程进入阻塞,取结果值会自动调用task.Wait()
Logger.Debug($"sync_result={result}");
Logger.Debug("5-sync");
}
Load += (s, e) =>
{
Logger.Debug("start-async");
DDAsync();
Logger.Debug("end-async");
Logger.Debug("start-sync");
DDSync();
Logger.Debug("end-sync");
};
public class Logger
{
public void Debug(string logs) => Console.WriteLine(logs);
}
【C#】两种最常用的Task阻塞方式(async/await和Result/Wait)
最新推荐文章于 2023-09-28 09:24:26 发布