zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    XXX is not in the sudoers file
    git错误“无法推送一些引用到xxx"的解决方法
    mysql开启远程访问
    ubuntu 在启动器中启动webstorm和phpstorm
    ubuntu nginx卸载和安装
    基于grunt构建的前端集成开发环境
    fullPage.js
    常见的HTTP状态码
    JS随机数
    CSS3简单的动画
  • 原文地址:https://www.cnblogs.com/xiajing12345/p/6178835.html
Copyright © 2011-2022 走看看