草庐IT

co_await

全部标签

c# - 为什么不使用 async/await 关键字时异步单元测试会失败?

根据thisdiscussion,下面两种方法应该没有区别:publicasyncTaskFoo(){awaitDoSomethingAsync();}publicTaskFoo(){returnDoSomethingAsync();}实际上,对于非常简单的方法来说,不async/await关键字的调用似乎是首选,因为它们可以消除一些开销。然而,这显然并不总是适用于单元测试。MSTest[TestClass]publicclassAsyncTest{[TestMethod]publicasyncTaskTest1(){awaitTask.Delay(0);}[TestMethod]pu

c# - 在任务中抛出异常 - "await"vs Wait()

staticasyncvoidMain(string[]args){Taskt=newTask(()=>{thrownewException();});try{t.Start();t.Wait();}catch(AggregateExceptione){//Whenwaitingonthetask,anAggregateExceptionisthrown.}try{t.Start();awaitt;}catch(Exceptione){//Whenawatingonthetask,theexceptionitselfisthrown.//inthiscasearegularExcept

c# - xUnit 和 Moq 不支持 async - await 关键字

我正在尝试探索如何将async和await关键字应用于我的xUnit测试。我正在使用xUnit1.9和AsyncCTP1.3。这是我的测试用例我有一个指定一个异步方法调用的接口(interface)publicinterfaceIDoStuffAsync{TaskAnAsyncMethod(stringvalue);}我有一个使用接口(interface)并调用异步方法的类publicclassUseAnAsyncThing{privatereadonlyIDoStuffAsync_doStuffAsync;publicUseAnAsyncThing(IDoStuffAsyncdoSt

c# - 使用 async/await 的异步 TcpListener 的正确方法

我一直在思考使用异步编程搭建TCP服务器的正确方式是什么。通常我会为每个传入请求生成一个线程,但我想使用ThreadPool的大部分内容,因此当连接空闲时,不会有阻塞的线程。首先,我会创建监听器并开始接受客户端,在本例中,是在控制台应用程序中:staticvoidMain(string[]args){CancellationTokenSourcecancellation=newCancellationTokenSource();varendpoint=newIPEndPoint(IPAddress.Parse("127.0.0.1"),8001);TcpListenerserver=n

c# - ThreadPool 服务器的 async/await 等价物是什么?

我正在使用同步api和线程池在看起来像这样的tcp服务器上工作:TcpListenerlistener;voidServe(){while(true){varclient=listener.AcceptTcpClient();ThreadPool.QueueUserWorkItem(this.HandleConnection,client);//OralternativelynewThread(HandleConnection).Start(client)}}假设我的目标是以最低的资源使用率处理尽可能多的并发连接,这似乎很快就会受到可用线程数的限制。我怀疑通过使用非阻塞任务api,我将

c# - await httpClient.SendAsync(httpContent) 没有响应

awaithttpClient.SendAsync(httpContent)没有响应,但我发现代码/url中没有错误,它仍然挂起。请建议/帮助。我的代码如下:publicasyncTaskGet_API_Result_String(stringurl,List>parameters){stringres="";try{IsolatedStorageSettingssettings=IsolatedStorageSettings.ApplicationSettings;//PrepareurlUrimainurl=newUri(settings[FSAPARAM.UserSettings

c# - 为什么 Resharper 使用此代码说 "Co-variant array conversion from string[] to object[] can cause run-time exception on write operation"?

这个问题在这里已经有了答案:Co-variantarrayconversionfromxtoymaycauserun-timeexception(7个答案)关闭7年前。这段代码:comboBoxMonth.Items.AddRange(UsageRptConstsAndUtils.months.ToArray());publicstaticListmonths=newList{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};提示“从string[]到object[]的Co-variant数

c# - 我以为 await 继续与调用者在同一个线程上,但似乎没有

我认为关于async/await的要点之一是,当任务完成时,继续在调用await时的相同上下文中运行,在我的例子中,这将是UI线程。例如:Debug.WriteLine("2:ThreadID:"+Thread.CurrentThread.ManagedThreadId);awaitfs.ReadAsync(data,0,(int)fs.Length);Debug.WriteLine("3:ThreadID:"+Thread.CurrentThread.ManagedThreadId);我不希望这样:2:ThreadID:103:ThreadID:11什么给了?为什么延续的线程ID与U

c# - 为什么 Enumerator.MoveNext 在与 using 和 async-await 一起使用时不能像我预期的那样工作?

我想通过一个List来枚举并调用异步方法。如果我这样做:publicasyncTaskNotWorking(){varlist=newList{1,2,3};using(varenumerator=list.GetEnumerator()){Trace.WriteLine(enumerator.MoveNext());Trace.WriteLine(enumerator.Current);awaitTask.Delay(100);}}结果是:True0但我希望它是:True1如果我删除using或awaitTask.Delay(100):publicvoidWorking1(){var

c# - NSubstitute - 收到异步 - “call is not awaited” 警告

我正在尝试验证是否使用正确的参数调用了异步方法。但是,我收到警告:“由于未等待此调用,因此在调用完成之前继续执行当前方法。考虑将‘await’运算符应用于调用结果”。此警告出现在//Assert注释下方的代码行中(如下)。我使用NSubstitute的测试如下:[Test]publicasyncTaskSimpleTests(){//Arrangevarrequest=CreateUpdateItemRequest();databaseHelperSub.ExecuteProcAsync(Arg.Any()).Returns(Task.FromResult((object)null))