博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Task.Delay()和Thread.Sleep()的區別
阅读量:4042 次
发布时间:2019-05-24

本文共 691 字,大约阅读时间需要 2 分钟。

  1. Thread.Sleep()是同步延迟,会阻塞當前线程;Task.Delay()是异步延迟,如果用在同步代碼中使用,不会阻塞當前线程,也沒有意義。
  2. Thread.Sleep()不能取消;Task.Delay()可以,可與async/await和CancellationTokenSource组合起来使用。
  3. 在异步代码中使用Thread.Sleep()是不好的選擇。通常使用await关键字调用Task.Delay()。

 

一個例子:

     private async void button12_Click(object sender, EventArgs e)

        {
            Stopwatch start = Stopwatch.StartNew();//測試用,計時器
            Task t = Task.Run(() =>
            {
                for (int i = 0; i <= 100; i++)
                {
                    progressBar1.Invoke(new Action(() =>  {
                        progressBar1.Value = i;
                    }));                    
                    Thread.Sleep(100);
                  // await Task.Delay(1000);//這里不能用 Task.Delay(1000), 在for循環的同步代碼中使用它沒有意義。   當然同步代碼中此處也不能用 await Task.Delay        
                }            
            });
            await t;
                       //await Task.Delay(10000);//再等待10秒
            lblMsg.Text += ($"{ start.ElapsedMilliseconds.ToString()}");
        }

转载地址:http://qimdi.baihongyu.com/

你可能感兴趣的文章
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Clone Graph(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
AngularJS2中最基本的文件说明
查看>>
从头开始学习jsp(2)——jsp的基本语法
查看>>
使用与或运算完成两个整数的相加
查看>>
备忘:java中的递归
查看>>
DIV/CSS:一个贴在左上角的标签
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
Vue组件
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>