异步函数Demo
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的更多相关文章
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
- Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历 https://www.cnblogs.com/shuxiaolong/p/DotNet_Task_BUG.html 异步Task简单 ...
- Vue异步组件Demo
Vue异步组件Demo 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义.Vue.js 只在组件需要 ...
- 简述异步编程&Promise&异步函数
前言:文章由本人在学习之余总结巩固思路,不足之前还请指出. 一.异步编程 首先我们先简单来回顾一下同步API和异步API的概念 1.同步API:只有当前的API执行完成之前,才会执行下一个API 例: ...
- Winform同步调用异步函数死锁原因分析、为什么要用异步
1.前言 几年前,一个开发同学遇到同步调用异步函数出现死锁问题,导致UI界面假死.我解释了一堆,关于状态机.线程池.WindowsFormsSynchronizationContext.Post.co ...
- 异步控制---实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出“end”
实现函数asyncAll,在执行完传入数组中func1,func2,func3异步函数后,输出"end" function func1(callback) { setTimeout ...
- Node.js用ES6原生Promise对异步函数进行封装
Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初 ...
- 异步函数封装请确保异步性(Javascript需要养成的良好习惯)
背景假设: 你有许多的配置信息存放在服务器上,因为配置太多,不希望每次都把所有的配置信息都写到前端,希望能需要用的时候再获取就好了. 因为Javascript单线程运行,你不希望堵塞ui渲染于是你专门 ...
- GCD,用同步/异步函数,创建并发/串行队列
队列 第一个参数:C语言字符串,标签 第二个参数: DISPATCH_QUEUE_CONCURRENT:并发队列 DISPATCH_QUEUE_SERIAL:串行队列 dispatch_queue_ ...
随机推荐
- [Python[PyQt]] ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'
解决办法: pip install PyQtWebEngine
- C语言的灵魂——指针基础
一.什么是指针 1.指针的定义:地址形象化为指针,通过指针能够找到内存单元. 指针变量就是地址变量,变量的值为指针. 指针其实是我们将变量名和地址的关系显化(独立)出来的一种形式,是为了我们更加方便的 ...
- hadoop java VM 参数设置 默认native栈大小设置
问题总结: 程序栈太小,64位机器的栈大小默认比32位的大,将程序从64放到32中执行则报错,需要修改初始堆栈大小 (.so库中提供两个函数接口,一个里面使用的是尺寸较大的图像,另一个处理的图像很小, ...
- VS开发】C中调用C++文件中定义的function函数
[VS开发]C中调用C++文件中定义的function函数 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 精要一揽 C调用 ...
- 子组件props接受父组件传递的值,能不能修改的问题
参考链接:https://www.cnblogs.com/pangchunlei/p/11139356.html
- 在文件每行后边添加固定文本(shell)
例子: 对/code/shell/servers 中每一行最后添加用户名和密码 原来长这样: /code/shell/servers 我对其每行添加" root 950102DK&quo ...
- mybatis 的一对一关联查询association
现在项目的列表查询数据需要查一个总数count, 如果直接写在同一个sql里面,会导致查询速度很慢, 因此,想到使用关联查询,例子如下: 附上代码: 其中遇到的坑哟: 1.association中的s ...
- IDEA操作之FileHeager设置
作用:头部注释添加,一般用于记录类的创建者等信息. 1. 打开配置 File->Settings->Editor->File and Code Templates->Inclu ...
- 【AtCoder】AGC002
AGC002 A - Range Product #include <bits/stdc++.h> #define fi first #define se second #define p ...
- 剑指offer43:左旋转字符串(字符串):对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。
1 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”a ...