【发布时间】:2018-08-06 00:55:08
【问题描述】:
我的问题是为什么延迟方法不起作用(整个操作没有等待 4 秒)并且 60% 没有显示在标签 1 中。
更准确地说,操作的顺序应该是这样的,整个操作应该需要 8 秒。但是需要 4 秒,只是 Thread.Sleep(4000) 里面的 LongTimeMethod1() 正在工作
LongTimeMethod1()//delay for 4 sec,show 60%
delay()//delay for 4 sec
LongTimeMethod()//40% imidiatly
我知道我可以只使用 await 和 async 编写代码,但我想知道我在这段代码中做错了什么。
private void button1_Click(object sender, EventArgs e)
{
CallBigMethod();
label1.Text =@"Waiting ...";
}
private async void CallBigMethod()
{
var result = await BigMethod();
label1.Text = result;
}
private Task<string> BigMethod()
{
return Task.Factory
.StartNew(() => LongTimeMethod1())
.ContinueWith((pre) => Delay())
.ContinueWith((pre) => LongTimeMethod());
}
private string LongTimeMethod()
{
return "40%...";
}
public async Task Delay()
{
await Task.Delay(4000);
}
private string LongTimeMethod1()
{
Thread.Sleep(4000);
return "60%...";
}
【问题讨论】:
-
@PetSerAl 它只是解决了时间问题,但没有解决显示 60% 的问题
标签: c# multithreading async-await