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. Ubuntu14.04中stopping log initial device creation错误或自动挂载错误失败(导致系统无法自动启动)

    出现问题的原因: 图一 出现问题的界面: 图二 按esc,无作用. 图三 按esc,按i,依然无作用. 图四 解决方法: (1)按esc,i无用,  在图2按s成功到登陆界面. (2)桌面修改为dis ...

  2. ArcMap 制作广州 18 级地图切片需要多少时间?

    制作地图切片包会随着级别的上升,瓦片数量会指数级地上升,所需的计算时间也是指数级的. 但是 ArcMap 并不会提示时间信息,只有一个圈没完没了地转... 就在这无聊地等待中,我写了这篇帖子. 电脑配 ...

  3. 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题

    在PC机上利用QT开发的应用程序在设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...

  4. 基于mxgraph.js开发的流程图组件

    1.fabric.js 在决定使用mxgraph.js开发流程图之前,尝试过用fabric.js来开发,结果发现并没有想象中的那么简单,而且用户体验非常差,下面是体验地址:workFlow直到遇到一个 ...

  5. golang 二维切片

    初始化: res := make([][length]int, length), 例如: res := make([][2]int, 10) fmt.Println(res) 输出: [[0 0] [ ...

  6. 如何使用 Issue 管理软件项目?

    软件开发(尤其是商业软件)离不开项目管理,Issue 是最通用的管理工具之一.

  7. mysql 监听ip地址修改

    如何修改MySQL监听IP地址 Mysql默认在本地环路地址127.0.0.1的3306端口监听,要使用其它IP地址需要修改配置文件. 1.编辑/etc/my.cnf 在[mysqld]节中增加下面一 ...

  8. mysql的binlog安全删除的一种方法

    指定过期天数(expire_logs_days) ---适用于单机版mysql!    该参数为全局可动态调整参数,默认值为0,即关闭,取值范围0-99. 1.3.1 参数的查看: mysql> ...

  9. servlet获取checkbox的值出现选中的值为on。问题所在。。。

    <form action="/Http/request06" method="post"> 用户名:<input type="tex ...

  10. java日志框架系列(3):logback框架配置详解

    1.Logback配置 1.配置步骤及默认配置 logback即可以通过编程式配置,也可以通过xml的形式配置. logback配置步骤: 1. 尝试在 classpath 下查找文件 logback ...