草庐IT

Async-await

全部标签

c# - 无法从 Task<> 隐式转换类型

我正在尝试掌握.NET4.5中的异步方法语法。我以为我已经完全理解了这些示例,但是无论异步方法的类型是什么(即Task),我总是在转换回T时得到相同类型的错误错误。-我知道这几乎是自动的。以下代码产生错误:Cannotimplicitlyconverttype'System.Threading.Tasks.Task>'to'System.Collections.Generic.List'publicListTestGetMethod(){returnGetIdList();//compilererroronthisline}asyncTask>GetIdList(){using(Htt

c# - 无法从 Task<> 隐式转换类型

我正在尝试掌握.NET4.5中的异步方法语法。我以为我已经完全理解了这些示例,但是无论异步方法的类型是什么(即Task),我总是在转换回T时得到相同类型的错误错误。-我知道这几乎是自动的。以下代码产生错误:Cannotimplicitlyconverttype'System.Threading.Tasks.Task>'to'System.Collections.Generic.List'publicListTestGetMethod(){returnGetIdList();//compilererroronthisline}asyncTask>GetIdList(){using(Htt

c# - 我是否应该担心 "This async method lacks ' 等待运算符(operator)并同步运行“警告

我有一个公开一些异步方法的接口(interface)。更具体地说,它定义了返回Task的方法。或Task.我正在使用async/await关键字。我正在实现这个接口(interface)。但是,在其中一些方法中,此实现没有任何等待。出于这个原因,我收到编译器警告“CS1998:此异步方法缺少'await'运算符并将同步运行......”我明白为什么我会收到这些警告,但想知道在这种情况下我是否应该对它们采取任何措施。忽略编译器警告感觉不对。我知道我可以通过等待Task.Run来修复它但是对于只执行一些廉价操作的方法来说,这是错误的。听起来它也会给执行增加不必要的开销,但我也不确定它是否已

c# - 我是否应该担心 "This async method lacks ' 等待运算符(operator)并同步运行“警告

我有一个公开一些异步方法的接口(interface)。更具体地说,它定义了返回Task的方法。或Task.我正在使用async/await关键字。我正在实现这个接口(interface)。但是,在其中一些方法中,此实现没有任何等待。出于这个原因,我收到编译器警告“CS1998:此异步方法缺少'await'运算符并将同步运行......”我明白为什么我会收到这些警告,但想知道在这种情况下我是否应该对它们采取任何措施。忽略编译器警告感觉不对。我知道我可以通过等待Task.Run来修复它但是对于只执行一些廉价操作的方法来说,这是错误的。听起来它也会给执行增加不必要的开销,但我也不确定它是否已

c# - 新的 C# 5.0 'async' 和 'await' 关键字是否使用多核?

添加到C#5.0语言的两个新关键字是async和await,两者协同工作以异步运行C#方法而不阻塞调用线程。我的问题是,这些方法是否真的利用了多核并并行运行,或者异步方法是否与调用方在同一个线程核心中运行? 最佳答案 TwonewkeywordsaddedtotheC#5.0languageareasyncandawait,bothofwhichworkhandinhandtorunaC#methodasynchronouslywithoutblockingthecallingthread.这理解了该功能的目的,但它给了async/

c# - 新的 C# 5.0 'async' 和 'await' 关键字是否使用多核?

添加到C#5.0语言的两个新关键字是async和await,两者协同工作以异步运行C#方法而不阻塞调用线程。我的问题是,这些方法是否真的利用了多核并并行运行,或者异步方法是否与调用方在同一个线程核心中运行? 最佳答案 TwonewkeywordsaddedtotheC#5.0languageareasyncandawait,bothofwhichworkhandinhandtorunaC#methodasynchronouslywithoutblockingthecallingthread.这理解了该功能的目的,但它给了async/

c# - 无法等待异步 lambda

考虑一下,Tasktask=newTask(async()=>{awaitTaskEx.Delay(1000);});task.Start();task.Wait();调用task.Wait()不会等待任务完成并立即执行下一行,但如果我将异步lambda表达式包装到方法调用中,代码将按预期工作。privatestaticasyncTaskAwaitableMethod(){awaitTaskEx.Delay(1000);}然后(根据svick的评论更新)awaitAwaitableMethod(); 最佳答案 在您的lambda示例

c# - 无法等待异步 lambda

考虑一下,Tasktask=newTask(async()=>{awaitTaskEx.Delay(1000);});task.Start();task.Wait();调用task.Wait()不会等待任务完成并立即执行下一行,但如果我将异步lambda表达式包装到方法调用中,代码将按预期工作。privatestaticasyncTaskAwaitableMethod(){awaitTaskEx.Delay(1000);}然后(根据svick的评论更新)awaitAwaitableMethod(); 最佳答案 在您的lambda示例

c# - 如何编写一个 "awaitable"方法?

我终于研究了async和await关键字,我有点“get”,但我看到的所有示例都调用了.Net框架中的异步方法,例如thisone,它调用HttpClient.GetStringAsync()。我不太清楚的是在这种方法中发生了什么,以及我将如何编写自己的“可等待”方法。是不是把我想异步运行的代码包装在一个Task中并返回它那么简单? 最佳答案 就这么简单Task.Run(()=>ExpensiveTask());使其成为可等待的方法:publicTaskExpensiveTaskAsync(){returnTask.Run(()=>

c# - 如何编写一个 "awaitable"方法?

我终于研究了async和await关键字,我有点“get”,但我看到的所有示例都调用了.Net框架中的异步方法,例如thisone,它调用HttpClient.GetStringAsync()。我不太清楚的是在这种方法中发生了什么,以及我将如何编写自己的“可等待”方法。是不是把我想异步运行的代码包装在一个Task中并返回它那么简单? 最佳答案 就这么简单Task.Run(()=>ExpensiveTask());使其成为可等待的方法:publicTaskExpensiveTaskAsync(){returnTask.Run(()=>