草庐IT

c# - 为什么使用 async 并等待 Task<>?

如果我有一个普通的方法,我想使其异步:publicintFoo(){}我会这样做:publicTaskFooAsync(){returnTask.Run(()=>Foo());}我为什么要这样做:publicasyncTaskFooAsync(){returnawaitTask.Run(()=>Foo());}我打算使用它的方式是:FooAsync().ContinueWith((res)=>{});我希望该方法不间断地运行,但我希望触发回调之类的东西,因此ContinueWith。但是对于第二个版本,使用它有什么意义吗? 最佳答案

c# - Windows 服务 OnStop 等待完成处理

我实际上在VS2012/.NET4.5中开发了一个Windows服务。该服务遵循以下代码片段的方案:使用计时器每隔几分钟执行一些所需的操作。该过程大约需要10分钟才能完成我在服务中使用单线程我担心的是,如果有人通过管理控制台停止服务,它可能只是在服务正在执行的过程中。我已经阅读了一些关于通过请求停止停止Windows服务的文章,但我有点迷茫。有时会创建WorkerThreads,有时会创建ManualResetEvents,但到目前为止,我无法完全掌握Windows服务的最佳前进方向。在停止Windows服务之前,我需要等到onStop方法中的处理正确完成。那么最好的方法是什么,同时考

c# - 使用 LINQ ForEach() 异步等待

我有以下正确使用异步/等待范式的代码。internalstaticasyncTaskAddReferencseData(ConfigurationDbContextcontext){foreach(varsinkNameinRequiredSinkTypeList){varsinkType=newSinkType(){Name=sinkName};context.SinkTypeCollection.Add(sinkType);awaitcontext.SaveChangesAsync().ConfigureAwait(false);}}如果我不使用foreach(),而是想使用LIN

空条件运算符和等待的 C# 错误

我在C#中使用新的null条件运算符时遇到了一个有趣的System.NullReferenceException。如果“MyObject”为空,以下代码会给我一个NullReferenceException:awaitthis.MyObject?.MyMethod()如果“MyObject”为空,我本以为不会调用“MyMethod”,还是我误解了空条件运算符的用途? 最佳答案 您可以添加??运算符,因此如果?.返回空任务,请改用CompletedTask。await(this.MyObject?.MyMethod()??Task.C

c# - 等待 Selenium Webdriver 更改的最佳实践?

点击事件后,我需要等待元素属性发生变化,然后再继续(点击事件导致某些元素移出焦点,而某些其他元素通过JS获得焦点)在花时间在网络驱动程序中搜索“waitForAttribute”(selenium1命令)的可靠替代方案之后......我可以让下面的代码工作。但我不确定这是否是最好的实现...还有其他更好的解决方案吗?wait=newWebDriverWait(wedriver1,TimeSpan.FromSeconds(5));.....button.Click();wait.Until(webdriver1=>webdriver2.webelement.GetAttribute("s

c# - 等待 Task.Run 与等待

我在网上搜索过很多关于Task.Run和awaitasync的问题,但是有一个具体的使用场景我不太明白其中的区别。我相信场景非常简单。awaitTask.Run(()=>LongProcess());对比awaitLongProcess());LongProcess是一个异步方法,其中包含一些异步调用,例如使用awaitExecuteReaderAsync()调用db。问题:在这个场景下两者有什么区别吗?感谢任何帮助或输入,谢谢! 最佳答案 Task.Run可以将要处理的操作发布到不同的线程。这是唯一的区别。这可能有用-例如,如果L

c# - 编写一个等待 bool 值的异步方法

我想编写一个方法来等待将变量设置为true。这是伪代码。boolIsSomethingLoading=falseSomeDataTheData;publicasyncTaskGetTheData(){awaitIsSomethingLoading==true;returnTheData;}TheData将由PrismEvent与IsSomethingLoading变量一起设置。我调用了GetTheData方法,但我希望它异步运行(现在它只在数据未准备好时返回null。(这会导致其他问题。)有办法吗? 最佳答案 在许多类似的情况下,您

c# - 异步/等待高性能服务器应用程序?

C#5中新的async/await关键字看起来很有前途,但我读过一篇关于对这些应用程序的性能影响的文章,因为编译器将为异步方法生成一个非常复杂的状态机。使用这些关键字进行异步编程要容易得多,但它是否与SocketAsyncEventArgsforSockets一样好?第二个问题:像Stream.WriteAsync这样的异步IO方法真的是异步的(.Net上的完成端口或Mono上的epoll/poll)还是这些方法是将写调用推送到线程池的廉价包装器?第三个问题:除了UI应用程序的SynchronizationContext之外,有没有办法实现某种单线程上下文?类似于事件循环的东西,以便完

c# - ApiController Post 中的异步和等待

我对.net4.5中的async和await还不是很清楚。到目前为止,我想我明白await:将函数(在它的右边)放在一个单独的线程上。将执行返回给当前函数的调用者但在等待(异步)函数完成之前保留当前函数的其余代码“人质”。如果我误解了什么,请纠正我。因此,如果上述情况属实,我将无法使用我想要异步的ApiController的Post函数:[HttpPost]publicasyncTaskPost([FromBody]MyObjectobj){myDataContext.MyObjects.InsertOnSubmit(obj);myDataContext.SubmitChanges()

C# 异步/等待 : Leave AsyncLocal<T> context upon task creation

AsyncLocal允许我们将上下文数据保存在异步控制流中。这非常巧妙,因为所有后续简历(甚至在另一个线程上)都可以检索和修改环境数据(AsyncLocalonMSDN)。有没有办法为子任务“留下”当前的异步本地上下文,从而创建一个新的本地上下文?AsyncLocalData=newAsyncLocal();Data.Value="One";Task.Factory.StartNew(()=>{stringInnerValue=Data.Value;//InnerValueequalsto"One",Ineedittobenull.});在上面的示例中,内部任务与外部控制流共享Asyn