private static async Task<String> IssueClientRequestAsync(string serverName, string message)
{
Console.WriteLine("进入IssueClientRequestAsync");
//NamedPipeClientStream 公开 System.IO.Stream 周围命名管道,支持同步和异步读取和写入操作。
//新实例初始化 System.IO.Pipes.NamedPipeClientStream 使用指定的管道和服务器名称,以及指定的管道方向和管道选项的类。
// 参数:
// serverName:
// 要连接的远程计算机的名称,或者为“.”,以指定本地计算机。
//
// pipeName:
// 管道的名称。
//
// direction:
// 确定管道方向的枚举值之一。(此处指定的管道方向是双向的)
//
// options:
// 确定如何打开或创建管道的枚举值之一。
using (var pipe = new NamedPipeClientStream(serverName, "PipeName", PipeDirection.InOut, PipeOptions.Asynchronous | PipeOptions.WriteThrough))
{
Console.WriteLine("Connect");
//连接到具有无限超时值的等待的服务器。
//必须在设置ReadMode之前连接
pipe.Connect(); Console.WriteLine("ReadMode");
//对象的读取模式
//指示是发送和读取的 消息流 的形式在管道中的数据,另外还有字节流(Byte)
pipe.ReadMode = PipeTransmissionMode.Message; Console.WriteLine("request");
byte[] request = Encoding.UTF8.GetBytes(message); Console.WriteLine("WriteAsync");
//将字节序列异步写入当前流,并将流的当前位置提升写入的字节数。
// buffer:
// 从中写入数据的缓冲区。
//
// offset:
// buffer 中的从零开始的字节偏移量,从此处开始将字节复制到该流。
//
// count:
// 最多写入的字节数。
await pipe.WriteAsync(request, , request.Length); Console.WriteLine("response");
byte[] response = new byte[]; Console.WriteLine("ReadAsync");
//从当前流异步读取字节序列,并将流中的位置提升读取的字节数。
// buffer:
// 数据写入的缓冲区。
//
// offset:
// buffer 中的字节偏移量,从该偏移量开始写入从流中读取的数据。
//
// count:
// 最多读取的字节数。
int bytesRead = await pipe.ReadAsync(response, , response.Length); Console.WriteLine("retuen");
return Encoding.UTF8.GetString(response, , bytesRead);
}
} private static void NamedPipeClientStreamTest()
{
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.In))
{ // Connect to the pipe or wait until the pipe is available.
Console.Write("Attempting to connect to pipe...");
pipeClient.Connect(); Console.WriteLine("Connected to pipe.");
Console.WriteLine("There are currently {0} pipe server instances open.", pipeClient.NumberOfServerInstances);
using (StreamReader sr = new StreamReader(pipeClient))
{
// Display the read text to the console
string temp;
while ((temp = sr.ReadLine()) != null)
{
Console.WriteLine("Received from server: {0}", temp);
}
}
}
}

异步函数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. 知识点整理-mysql的顺序I/O和随机I/O

    假设有这样一张表: CREATE TABLE `person_info` ( `id` ) NOT NULL AUTO_INCREMENT, `name` varchar() NOT NULL, `b ...

  2. IDEA配置SpringBoot应用的profile启动参数

    参考博客:https://blog.csdn.net/li396864285/article/details/83576829 如图为, 配置多台eureka的启动参数, 分别为: --spring. ...

  3. Leetcode之并查集专题-765. 情侣牵手(Couples Holding Hands)

    Leetcode之并查集专题-765. 情侣牵手(Couples Holding Hands) N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并 ...

  4. 【并行计算与CUDA开发】英伟达硬件加速编解码

    硬件加速 并行计算 OpenCL OpenCL API VS SDK 英伟达硬件编解码方案 基于 OpenCL 的 API 自己写一个编解码器 使用 SDK 中的编解码接口 使用编码器对于 OpenC ...

  5. bootstrap基础学习【表单含按钮】(二)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. CentOS 7.5在线安装Docker 18.09.3

    1.安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 2.安装docker yum-config-manager -- ...

  7. Minimizing Difference 【思维】

    题目链接: https://vjudge.net/contest/336389#problem/B 题目大意: 给出一个长度为n的数列以及操作次数k.k的范围为1e14.每次操作都可以选择给任意一个数 ...

  8. vim bundle安装

    一.准备工作 安装Git(因为下面我们选择的插件管理器需要使用到它)安装其他插件前首先需要选择一个Vim插件管理器,我这里选择的是Vundle,Vundle的工作过程中需要通过Git自动从远程创库同步 ...

  9. resful规范: 进行数据交换时的代码潜规则

    目前主流的三种web服务交互方案: REST (Representational State Transfer) 表征性状态转移 SOAP (Simple Object Access Protocol ...

  10. 又谈F分布

    今天看到一篇不错的博文,有感,记录下来,相对来说讲到了本质,也很容易理解.https://www.cnblogs.com/think-and-do/p/6509239.html 首先,老生常谈,还是那 ...