【问题标题】:Delay in a task任务延迟
【发布时间】:2018-10-21 05:07:21
【问题描述】:

无法延迟任务。
同步完全没有延迟。
异步停止在await Task.Delay(delay);

我试过了:

Task wait4me = Task.Delay(1000);
await wait4me;

它没有工作 - 它停在await wait4me;

Task<int> TaskOfTResult_MethodSync(int delay)
{
    Debug.WriteLine($"TaskOfTResult_MethodSync delay = {delay}  {DateTime.Now}");
    int hours = 10; 
    Task.Delay(delay);
    Debug.WriteLine($"TaskOfTResult_MethodSync after delay  {DateTime.Now}");
    return Task.FromResult(hours);
}
async Task<int> TaskOfTResult_MethodAsync(int delay)
{
    Debug.WriteLine($"TaskOfTResult_MethodAsync  delay = {delay}   {DateTime.Now}");
    await Task.Delay(delay);
    Debug.WriteLine($"After await Task.Delay({delay})  {DateTime.Now}");
    int hours = 11;
    return hours;
}

测试

Task<int> task = TaskOfTResult_MethodSync(1000);
Debug.WriteLine("before task.Wait");
task.Wait();
Debug.WriteLine("after  task.Wait");
int i = task.Result;
Debug.WriteLine($"i = {i}");
Debug.WriteLine($"");


Task<int> taskA = TaskOfTResult_MethodAsync(1000);
Debug.WriteLine("before taskA.Wait");
taskA.Wait();
Debug.WriteLine("after  taskA.Wait");
i = taskA.Result;
Debug.WriteLine($"i = {i}");
Debug.WriteLine($"");

【问题讨论】:

标签: c# .net async-await delay


【解决方案1】:

你可以简单地做到这一点

Task.Delay(delay).Wait()

【讨论】:

  • 这修复了语法但它阻塞的问​​题。 '任务 任务 = TaskOfTResult_MethodSync(1000);'直到延迟完成才完成。真正的目的是加载一些数据并保持 UI 响应。
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 2020-12-18
相关资源
最近更新 更多