首页 > 编程语言 >在C#中能用异步来包装同步调用吗?

在C#中能用异步来包装同步调用吗?

时间:2022-11-03 12:13:39浏览次数:60  
标签:异步 调用 示例 C# request 包装 client 中能

今天早上在地铁上看到一篇公众号文章,指出滥用async/await的两种情况。

如下:

一、在异步方法中返回Task。

错误调用代码示例:

var responseTask = Task.Run(() => client.GetServicesAsync(request));
ServiceResponse response = await responseTask;

正确调用代码示例:

1 ServiceResponse response = await client.GetServicesAsync(request);

这种确实属于滥用了异步调用了。

 

二、使用异步方法来包装同步方法

代码示例:

1 var responseTask = Task.Run(() => client.GetData(request));

 

公众号上说这种调用是有问题的,我看到这里就有点纳闷了,如果client.GetData(request)是一个耗时的操作怎么办,那不是一直等在这里吗。

于是我立马搜索相关资料,找到了这篇文章。

https://devblogs.microsoft.com/pfxteam/should-i-expose-asynchronous-wrappers-for-synchronous-methods/

文章中指出,是可以在异步方法中包装同步调用的,但是要根据实际情况而定。

看完这篇文章,我就在想,现在的公众号写文章这么不负责吗,写得这么肯定 。

我再回到公众号上的文章,点阅读原文,进去一看,原来这两种情况是针对 Asp.Net的,他搬运的时候,把标题给精简了。

我对Web开发不熟,只是我平常在桌面开发中,肯定是需要这种包装的,否则UI线程就会卡死,界面失去响应。要不是我平常读过点书,差点被这公众号文章给骗了。

 

能不能使用异步方法包装同步调用?

标签:异步,调用,示例,C#,request,包装,client,中能
From: https://www.cnblogs.com/zhaotianff/p/16854014.html

相关文章

  • chromedriver下载与安装方法,亲测可用
    chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.htmlhttp://npm.taobao.org/mirrors/chromedriver/两个地址都可以下载,根据自己的chrome浏览器的......
  • VS 生成事件 xcopy 报错的解决方法
    出现这种情况有可能原因有2种可能:1、目标文件夹设为只读:此时报错:MSB3073代码4,输出显示:访问遭到拒绝。解决:去掉文件夹只读属性。2、缺少环境变量:报错为::MSB3073代......
  • OpenCV VideoCapture 读取视频并且获取一帧和帧率
    前言这篇文章主要讲述如何读取视频并且获取一帧图像和帧率一、代码1#include<opencv2/opencv.hpp>2#include<iostream>3usingnamespacecv;4intmain()......
  • CSS面试题
    1、盒模型答:分为标准盒模型和怪异盒模型(IE盒模型)标准盒模型:宽高(content)+padding+border+margin怪异盒模型(IE盒模型):宽高(content+padding+border)+margin2、bo......
  • TCP 首部解析与连接的建立与释放
    1.TCP首部解析源端口,目的端口:使用TCP协议传输数据时,从本机发送出去时通过的端口和目标机器用于接收的端口序号(SequenceNumber):用于标记相应的TCP报文......
  • centos 设置CDN
    修改NetworkManager.conf配置文件vim/etc/NetworkManager/NetworkManager.conf在[main]中添加dns=no修改resolv.conf配置文件vim/etc/resolv.conf添加#主D......
  • 【重磅】Serverless Devs 进入 CNCF 沙箱,成首个入选的 Serverless 工具项目!
    近日,经过云原生计算基金会(CNCF)TOC例会上投票决议,ServerlessDevs正式成为CNCF官方沙箱项目。开源开放的Serverless开发者平台——ServerlessDevs由阿里云开源,致......
  • Electron 窗体 BrowserWindow
    http://jsrun.net/t/KfkKphttps://www.wenjiangs.com/doc/tlsizw1dsthttps://www.w3cschool.cn/electronmanual/electronmanual-browser-window.html使用BrowserWindow......
  • vscode商店打不开
    以管理员身份打开命令行(CMD):输入以下命令ipconfig/renewipconfig/registerdnsipconfig/flushdnsipconfig/release(注:分四行输入,每次输入完一行按下enter键)重......
  • 从ObjectPool到CAS指令
    相信最近看过我的文章的朋友对于Microsoft.Extensions.ObjectPool不陌生;复用、池化是在很多高性能场景的优化技巧,它能减少内存占用率、降低GC频率、提升系统TPS和降低请求......