某某茶叶有限公司欢迎您!
金沙棋牌在线 > 金沙棋牌在线 > async await Task

async await Task

时间:2020-01-17 12:54
  • 多线程与异步-什么是线程安全?
  • 多线程与异步-C# 如何使用线程
  • 多线程与异步-关于让线程“等等”有关的几个方法
  • 多线程与异步-将参数传入线程的三种方法
  • 多线程与异步-C# 异步调用
  • 多线程与异步-异步调用与多线程的区别
  • 多线程与异步-异步调用 Web Service
  • 多线程与异步-Task.run、await、async 以异步方式执行

一、使用Task

async,await,Task 的一些用法


引用命名空间

private void Form1_Load(object sender, EventArgs e)
{
    Display();
}

public async void Display()
{
    int result = await GetValueAsync(123);
    this.label1.Text = "Value is : " + result;
}

public Task<int> GetValueAsync(int num)
{
    // 方法1
    return Task.Run(() =>
    {
        return DoSomething(num);
    });

    // 方法2
    return Task.Run(() =>
    {
        //DoSomething
        System.Threading.Thread.Sleep(3000);
        return num;
    });

    // 方法3
    object state = num;
    Task<int> task = new Task<int>(DoSomething, state);
    task.Start();
    return task;
}

public int DoSomething(int num)
{
    System.Threading.Thread.Sleep(3000);
    return num;
}

public int DoSomething(object state)
{
    System.Threading.Thread.Sleep(3000);
    return Convert.ToInt32(state);
}

本文适用于 .NET Framework 4.5 及以上版本。低版本中无此特性。

using System.Threading.Tasks;

 

Task.run

1.工厂方式

传统的防止大量工作阻塞 UI,用的是线程。现在 C# 发展越来越强大,有很多种方法了,虽然略有不同,但归根到底还是线程。

Task.Factory.StartNew(() => {Console.WriteLine("Hello Task library!"); });

private void button1_Click(object sender, EventArgs e) { SetValue(); } private void SetValue() { Task.Run(() => { Thread.Sleep(2000); // 模拟大量工作阻塞 2 秒 button1.Text = "1"; }); }

2.实例方式

如上代码,在点击按钮后,是可以拖动窗口界面的,说明并没有影响 UI。

Task task = new Task(() => PrintMessage());
task.Start();