哲学原理异步方法的修和应用

by admin on 2018年11月17日

其次、异步方法的施用
asp.net中行使async可以升级网站的吞吐量(网站可够应本着再次胜似之并发量)。MVC、WebAPI的控制器都是好据此async修饰的,EF提供了异步操作的方法。
a)MVC中得只需要用Task<>包装IActionResult即可

列一个目标,都有一个在内存中之地点哈希值,这个哈希值是十六进制的

static Task<int> Test1Async() {
  return Task.Run(() => {
    return 1 + 1;
  });
}

static Task<int> Test2Async() {
  return Task.FromResult(3);
}

调用Object对象的toString()方法,得到:类名@哈希值

static Task<HttpResponseMessage> Test4Async() {
  HttpClient hc = new HttpClient();
  var taskMsg = hc.GetAsync(“http://www.bing.com”);
  return taskMsg;
}

调用Class对象的getName()方法,得到近似的名称

然写的结果貌似await
hc.GetAsync…相同,但await时是放掉线程,而而用.Result却是于线程暂停(block),可见无法发挥异步的意,还容易因达下文切换导致死锁。不是那个亮,还需要在延续的利用被领悟了。
b)编写异步方法发生几种植形式,典型的比方:

 

b)EF也也增删改查准备了异步方法,比如SaveChangesAsync、FirstAsync、ForeachAsync等。
c)异步一定要“彻底”,一个记了async的不二法门,其全方位调用链上之方式都如是异步的。.Result这样的故法会抵消异步带来的便宜。

调用Integer.toHexString()方法,转换十六进制

HttpClient hc = new HttpClient();
var taskMsg = hc.GetAsync(“http://www.bing.com”);
var taskRead = taskMsg.Result;

 

static async Task<HttpResponseMessage> Test4Async() {
  HttpClient hc = new HttpClient();
  var taskMsg =await hc.GetAsync(“http://www.rupeng.com”);
  return taskMsg;
}

调用Object对象的getClass()方法,得到Class对象

Task.Run的参数为Action,看来和thread.Start()来执行于指向的函数是一个原理。

调用Object对象的hashCode()方法,返回这个目标的哈希值

c)另外还有Task.Run/FromResult方法

哲学原理 1

一致、异步方法的编纂
a)
如果需要运用await,则法必须用async修饰。控制器、事件处理函数这些都可以动用async,但Main函数却未克。如果急需以Mainh函数中调用异步方法,可以以Result属性,比如:

当我们创建一个目标,会以硬盘上生成xxx.class的公文,jdk定义了Class类来叙述这些class文件

public async Task<IActionResult> Index() {
  using (FileStream stream =
System.IO.File.OpenRead(“d:/ckcore.txt”))
  using (StreamReader st = new StreamReader(stream)) {
    string txt =  st.ReadToEndAsync();
    return Content(txt);
  }
}

实现原理是类似的反光

回到Task<T>以供后续处理。
对HttpClient请求,也可直接回HttpResponseMessage,需要般配使用async和await

public class ObjectDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ObjectDemo od=new ObjectDemo();
        System.out.println(od.toString());//输出 ObjectDemo@26f04d94
        System.out.println(Integer.toHexString(od.hashCode()));//输出 26f04d94

        //反射
        Class c=od.getClass();
        System.out.println(c.getName()+"@"+Integer.toHexString(od.hashCode()));
    }

}

上学材料:如鹏网.net提高班http://www.rupeng.com/News/10/4603.shtml

 

便咱们会复写toString()方法,因为默认的远非最好死意思

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图