【发布时间】:2021-08-24 18:39:15
【问题描述】:
我很少使用 task / await 来调用我的函数。请看一下我的代码示例。我正在使用 .net v4.5.2。
private async void button1_Click(object sender, EventArgs e)
{
bool retvalue = false;
var periodTimeSpan = TimeSpan.FromSeconds(10);
var task1 = SimulateJob();
var task2 = Task.Delay(periodTimeSpan);
await Task.WhenAll(task1, task2);
retvalue = (bool) task1.Result;
}
private Task<bool> SimulateJob()
{
bool status = false;
Task.Delay(10000);
status = true;
return Task.FromResult(status);
}
请运行代码并了解 SimulateJob() 函数会被调用两次。
在我的 SimulateJob() 函数 中,将大的 excel 文件加载到电子表格控件中。如果该函数被调用两次,那对我来说将是个问题。
如何更改我的代码,以便当此行将执行 await Task.WhenAll(task1, task2); 然后我的 SimulateJob() 函数 将是调用。
在实际代码中SimulateJob() 函数 加载多个大的excel 文件。我看到当这条线执行 var task1 = SimulateJob(); 然后我的例程加载所有那些大文件,这是我的问题。我希望当这条线执行await Task.WhenAll(task1, task2); 时,我的 SimulateJob 函数 应该加载那些大的 excel 文件。所以告诉我我需要在我的代码示例中更改什么。
请帮助我处理这种情况。谢谢
【问题讨论】:
-
它没有被调用两次
-
你想通过在任务 2 中延迟 10 秒来达到什么目的?你想等待你当前的线程直到你完成你的函数
SimulateJob? -
@AbhilashAugustine 是的,我想在 10 秒后执行 SimulateJob() 将被延迟。但是当我逐行调试代码时,我看到 SimulateJob() 调用了两次。
-
在实际代码中 SimulateJob() 函数加载多个 bug excel 文件。我看到这条线
var task1 = SimulateJob();然后我的例程加载所有那些大文件,这是我的问题。我希望当这条线执行`await Task.WhenAll(task1, task2);`时,我的 SimulateJob 函数应该加载那些大的 excel 文件。所以告诉我我需要改变什么。谢谢 -
要清楚——
await和WhenAll都不负责启动任何事情。你给他们已经在运行Tasks,他们会等待他们完成。听起来像你的SimulateJob方法,尽管返回Task实际上是同步的。
标签: c#