• C# 异步操作 async await 的用法


    1. async与 await 成对出现 async 在方法前使用 ,方法体面面用  await .

    2. 使用async 和await定义异步方法不会创建新线程.

    3.await 后面一定是一个扫行时间长的任务,要用 Task.Run(()=>{    }); 类似的代码来执行.

    4.返回写成 Task<Type>. 后面的代码要等 这个执行完后 再执行.

    5.界面不阻塞

    例子:

    private async void button2_Click(object sender, EventArgs e)
    {
    //异步方法
    this.button2.Enabled = false;

    long length = await AccessWebAsync();
    this.button2.Enabled = true;
    // 这里可以做一些不依赖回复的操作
    OtherWork(); // 这里要等 AccessWebAsync 执行完后 才能执行

    this.textBox1.Text += String.Format(" 回复的字节长度为: {0}. ", length);
    txbMainThreadID.Text = Thread.CurrentThread.ManagedThreadId.ToString();
    }

    private void OtherWork()
    {
    this.textBox1.Text += " 等待服务器回复中................. ";
    }

    private async Task<long> AccessWebAsync()
    {


    //await Task.Run(() => { Thread.Sleep(5000); Console.WriteLine("bbb1"); Console.WriteLine("bbb2"); Console.WriteLine("bbb3"); });
    MemoryStream content = new MemoryStream();
    await Task.Run(() =>
    {
    // 对MSDN发起一个Web请求
    HttpWebRequest webRequest = WebRequest.Create("http://msdn.microsoft.com/zh-cn/") as HttpWebRequest;
    if (webRequest != null)
    {
    // 返回回复结果
    using (WebResponse response = webRequest.GetResponse())
    {
    using (Stream responseStream = response.GetResponseStream())
    {
    responseStream.CopyTo(content);
    }
    }
    }
    });

    txbAsynMethodID.Text = Thread.CurrentThread.ManagedThreadId.ToString();
    return content.Length;
    }

  • 相关阅读:
    maven学习讲解
    《Struts2.x权威指南》学习笔记2
    《Struts2.x权威指南》学习笔记1
    【转】Maven3把命令行创建的web工程转成Eclipse和IntelliJ Idea的工程
    [转]h5页面测试总结
    《零成本实现Web性能测试:基于Apache JMeter》读书笔记
    《软件性能测试过程详解与案例剖析》读书笔记
    手机屏幕尺寸测试——手机的实际显示页面的宽度
    web常识
    vue 生命周期
  • 原文地址:https://www.cnblogs.com/xiajing12345/p/6178835.html
Copyright © 2020-2023  润新知