async await 同步方法调用异步方法死锁
同步方法调用异步方法
.GetAwaiter().GetResult()
计算函数超时,异步方法所有的回调操作都会期望返回到主线程。
所以会导致各种线程死锁。异步方法中使用ConfigureAwait(false)解决
public void Check(){ //todo
//验证userid和token是否匹配
var tUserId = UserIdAndTokenValidationAsync(userId, at.UserId);
//验证参数签名是否正确
Task<bool> tvalid = CheckSignatureAsync(paramList, signature, at.Token);
//验证请求时间
Task<bool> tTicks = TicksValidationAsync(signature, timestamp);
bool userIdRes = tUserId.GetAwaiter().GetResult();
bool validRes = tvalid.GetAwaiter().GetResult();
bool ticksRes = tTicks.GetAwaiter().GetResult();
}
public async Task<bool> UserIdAndTokenValidationAsync(int requsetUserId, int tokenUserId)
{
bool res = await Task.Factory.StartNew(() =>
{
return UserIdAndTokenValidation(requsetUserId, tokenUserId);
}).ConfigureAwait(false);
return res;
}
async await 同步方法调用异步方法死锁的更多相关文章
- 一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相
在我们 2015 年开始的从 .NET Framework 向 .NET Core 迁移的工程中,遇到的最大的坑就是标题中所说的--同步方法中调用异步方法发生"死锁".虽然在 .N ...
- Async Await异步调用WebApi
先铺垫一些基础知识 在 .net 4.5中出现了 Async Await关键字,配合之前版本的Task 来使得开发异步程序更为简单易控. 在使用它们之前 我们先关心下 为什么要使用它们.好比 一个 ...
- async/await 的一些知识 (死锁问题)
博文 Don't Block on Async Code What is the purpose of "return await" in C#? Any difference b ...
- 【转】.NET 4.5 使用async和await关键字调用异步方法
async和await关键字是.NET 4.5新增加的异步编程方式,通过使用这两个关键字可以轻松便捷的编写异步方法.使用async关键字声明异步方法,使用await关键字等待和获取异步方法返回的结果. ...
- abp中使用同步方法调用异步方法
var result= AsyncHelper.RunSync(()=>{ return _service.GetUserAsync(); });
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...
- [译]async/await中阻塞死锁
这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的两篇博文中翻译过来. 原文1:Don'tBlock o ...
- [译]async/await中使用阻塞式代码导致死锁 百万数据排序:优化的选择排序(堆排序)
[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Cleary的 ...
- [译]async/await中使用阻塞式代码导致死锁
原文:[译]async/await中使用阻塞式代码导致死锁 这篇博文主要是讲解在async/await中使用阻塞式代码导致死锁的问题,以及如何避免出现这种死锁.内容主要是从作者Stephen Clea ...
随机推荐
- Java的23种设计模式(转)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- SiteMesh2-示例工程
了解SiteMesh的最佳方法是使用它.假设SiteMesh设置在您的Web应用程序中,本教程将展示如何掌握SiteMesh最强大的方面,如下所示装饰页面: 效果发生在第2步,其中Menu.jsp页面 ...
- Android开发系列(二十四):Notification的功能与使用方法
关于消息的提示有两种:一种是Toast,一种就是Notification.前者维持的时间比較短暂.后者维持的时间比較长. 并且我们寻常手机的应用比方网易.贴吧等等都有非常多的推送消息,就是用Notif ...
- iOS中的枚举:enum, NS_ENUM, NS_OPTIONS的使用区别
1.enum可以声明一般类型和位掩码(bitmasked)类型 例如: enum Test{// 一般枚举 TestA, TestB, TestC, }; enum{// 匿名枚举 TestA, Te ...
- Android开发之使用sqlite3工具操作数据库的两种方式
使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/feng ...
- 一款炫酷Loading动画--载入失败
简单介绍 上一篇文章一款炫酷Loading动画–载入成功.给大家介绍了成功动画的绘制过程,这篇文章将接着介绍载入失败特效的制作. 相比成功动画,有了前面的经验,失败动画的过程就显得比較简单了. 动画结 ...
- 基于TCP/UDP的socket编程
基于TCP(面向连接)的socket编程服务器端顺序: 1. 创建套接字(socket) 2. 将套接字绑定到一个本地地址和端口上(bind) 3. 将套接字设为监听模式,准备接收客户请求(liste ...
- MyReport报表系统v1.2公布
经过多月奋战.MyReport报表系统最终完好,里程碑版本号V1.2隆重公布. 系统介绍 MyReport报表系统是基于MyReport报表引擎构建的报表开发工具平台产品.用户可以高速搭建报表中心,实 ...
- 143 - ZOJ Monthly, October 2015 I Prime Query 线段树
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a s ...
- debian网络静态ip配置
本配置适合于服务器上的静态ip配置,该方法简单可靠. 1 临时配置 ifconfig eth0 192.168.1.97 netmask 255.255.255.0 broadcast 192.168 ...