1. private static async Task<String> IssueClientRequestAsync(string serverName, string message)
  2. {
  3. Console.WriteLine("进入IssueClientRequestAsync");
  4. //NamedPipeClientStream 公开 System.IO.Stream 周围命名管道,支持同步和异步读取和写入操作。
  5. //新实例初始化 System.IO.Pipes.NamedPipeClientStream 使用指定的管道和服务器名称,以及指定的管道方向和管道选项的类。
  6. // 参数:
  7. // serverName:
  8. // 要连接的远程计算机的名称,或者为“.”,以指定本地计算机。
  9. //
  10. // pipeName:
  11. // 管道的名称。
  12. //
  13. // direction:
  14. // 确定管道方向的枚举值之一。(此处指定的管道方向是双向的)
  15. //
  16. // options:
  17. // 确定如何打开或创建管道的枚举值之一。
  18. using (var pipe = new NamedPipeClientStream(serverName, "PipeName", PipeDirection.InOut, PipeOptions.Asynchronous | PipeOptions.WriteThrough))
  19. {
  20. Console.WriteLine("Connect");
  21. //连接到具有无限超时值的等待的服务器。
  22. //必须在设置ReadMode之前连接
  23. pipe.Connect();
  24.  
  25. Console.WriteLine("ReadMode");
  26. //对象的读取模式
  27. //指示是发送和读取的 消息流 的形式在管道中的数据,另外还有字节流(Byte)
  28. pipe.ReadMode = PipeTransmissionMode.Message;
  29.  
  30. Console.WriteLine("request");
  31. byte[] request = Encoding.UTF8.GetBytes(message);
  32.  
  33. Console.WriteLine("WriteAsync");
  34. //将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。
  35. // buffer:
  36. // 从中写入数据的缓冲区。
  37. //
  38. // offset:
  39. // buffer 中的从零开始的字节偏移量,从此处开始将字节复制到该流。
  40. //
  41. // count:
  42. // 最多写入的字节数。
  43. await pipe.WriteAsync(request, , request.Length);
  44.  
  45. Console.WriteLine("response");
  46. byte[] response = new byte[];
  47.  
  48. Console.WriteLine("ReadAsync");
  49. //从当前流异步读取字节序列,并将流中的位置提升读取的字节数。
  50. // buffer:
  51. // 数据写入的缓冲区。
  52. //
  53. // offset:
  54. // buffer 中的字节偏移量,从该偏移量开始写入从流中读取的数据。
  55. //
  56. // count:
  57. // 最多读取的字节数。
  58. int bytesRead = await pipe.ReadAsync(response, , response.Length);
  59.  
  60. Console.WriteLine("retuen");
  61. return Encoding.UTF8.GetString(response, , bytesRead);
  62. }
  63. }
  64.  
  65. private static void NamedPipeClientStreamTest()
  66. {
  67. using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.In))
  68. {
  69.  
  70. // Connect to the pipe or wait until the pipe is available.
  71. Console.Write("Attempting to connect to pipe...");
  72. pipeClient.Connect();
  73.  
  74. Console.WriteLine("Connected to pipe.");
  75. Console.WriteLine("There are currently {0} pipe server instances open.", pipeClient.NumberOfServerInstances);
  76. using (StreamReader sr = new StreamReader(pipeClient))
  77. {
  78. // Display the read text to the console
  79. string temp;
  80. while ((temp = sr.ReadLine()) != null)
  81. {
  82. Console.WriteLine("Received from server: {0}", temp);
  83. }
  84. }
  85. }
  86. }

异步函数Demo的更多相关文章

  1. 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历

    异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...

  2. Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历

    Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历 https://www.cnblogs.com/shuxiaolong/p/DotNet_Task_BUG.html 异步Task简单 ...

  3. Vue异步组件Demo

    Vue异步组件Demo 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义.Vue.js 只在组件需要 ...

  4. 简述异步编程&Promise&异步函数

    前言:文章由本人在学习之余总结巩固思路,不足之前还请指出. 一.异步编程 首先我们先简单来回顾一下同步API和异步API的概念 1.同步API:只有当前的API执行完成之前,才会执行下一个API 例: ...

  5. Winform同步调用异步函数死锁原因分析、为什么要用异步

    1.前言 几年前,一个开发同学遇到同步调用异步函数出现死锁问题,导致UI界面假死.我解释了一堆,关于状态机.线程池.WindowsFormsSynchronizationContext.Post.co ...

  6. 异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”

    实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出"end" function func1(callback) { setTimeout ...

  7. Node.js用ES6原生Promise对异步函数进行封装

    Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初 ...

  8. 异步函数封装请确保异步性(Javascript需要养成的良好习惯)

    背景假设: 你有许多的配置信息存放在服务器上,因为配置太多,不希望每次都把所有的配置信息都写到前端,希望能需要用的时候再获取就好了. 因为Javascript单线程运行,你不希望堵塞ui渲染于是你专门 ...

  9. GCD,用同步/异步函数,创建并发/串行队列

    队列  第一个参数:C语言字符串,标签 第二个参数: DISPATCH_QUEUE_CONCURRENT:并发队列 DISPATCH_QUEUE_SERIAL:串行队列 dispatch_queue_ ...

随机推荐

  1. 让IIS支持解析.json格式文件

    原文出处链接及本声明. 原文链接:https://blog.csdn.net/jumtre/article/details/72630730 1.IIS内点击网站进入网站主页设置界面: 2.双击MIM ...

  2. webdriervAPI(CSS定位元素)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  3. GitHub快速搭建个人博客

    > 正所谓前人栽树,后人乘凉.> > 感谢[Huxpro](https://github.com/huxpro)提供的博客模板> > [我的的博客](https://fl ...

  4. Bootstrap 表单示例

    1.打开https://getbootstrap.com/docs/4.3/examples/checkout/复制表单源码 2.清空main标签内容 3.粘贴表单源码 4.示例图

  5. PYTHON 100days学习笔记008-3:输入和输出

    目录 Day008-03:Python3 输入和输出 1.输出格式美化 1.1 str.format()用法 1.2 旧式字符串格式化 2.读取键盘输入 3.读和写文件 4.文件对象的方法 4.1 f ...

  6. 2019牛客多校赛第一场 补题 I题

    I题  Points Division 题意: 给你n个点,每个点有坐标(xi,yi)和属性(ai,bi),将点集划分为两个集合, 任意 A 集合的点 i 和 B 集合点 j, 不允许 xi > ...

  7. 【转帖】Linux的NUMA机制

    Linux的NUMA机制 http://www.litrin.net/2014/06/18/linux的numa机制/ NUMA(Non-Uniform Memory Access)字面直译为“非一致 ...

  8. (三)mysql SQL 基本操作

    文章目录 MySQL服务器对象 mysql 的基本操作 SQL的注释 库操作 表(字段)操作 数据操作 MySQL服务器对象 mysql 服务器对象内部分成了 4 层: 系统(DBMS)----> ...

  9. error LNK2001: unresolved external symbol __imp__closesocket@4

    环境:Visual C++6.0 问题:链接错误 描述: Linking... NetSrv.obj : error LNK2001: unresolvedexternal symbol __imp_ ...

  10. 剑指offer17:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 2 思路和方法 (1)先在A中找和B的根节点相同的结点 (2)找到之后遍历对应位置的其他结点, ...