草庐IT

c# - 嵌套异步/等待方法

我正在编写一个包含第三方Web服务调用的库,并试图让该库使用新的异步/等待功能。以下示例中async/await关键字的正确用法是什么?publicclassMyApi{publicTaskDoSomethingAsync(){returnthis.DoSomethingCore();}publicasyncTaskDoSomethingElseAsync(){returnawaitthis.DoSomethingCore();}privateasyncTaskDoSomethingCore(){varhttpClient=newHttpClient();varhttpResponse

c# - 使用最小起订量的同步方法测试 EF 异步方法

我有这个方法:publicasyncTaskDeleteUserAsync(GuiduserId){using(varcontext=this.contextFactory.Create()){varuser=awaitcontext.Users.FirstOrDefaultAsync(x=>x.Id.Equals(userId));if(user==null){thrownewException("Userdoesn'texist");}context.Users.Remove(user);awaitcontext.SaveChangesAsync();}}我想测试一下。所以我创建了

c# - 如何在返回集合的 lambda 中使用异步

我有一个异步“上游”方法。我正在尝试遵循最佳实践并在堆栈中一直采用qithasync。在MVC的Controller操作中,如果我依赖.Result(),我可以预见会遇到死锁问题。将Controller操作更改为异步似乎是可行的方法,但问题是异步方法在lambda中被多次调用。我如何等待返回多个结果的lamda?publicasyncTaskGetLotsOfStuff(){IEnumerablethings=previouslyInitialisedCollection.Select(asyncq=>awaitGetDetailAboutTheThing(q.Id)));return

c# - 结构的私有(private)字段值未使用异步方法更新

我刚刚在结构中使用异步方法时遇到了一个奇怪的行为。有人可以解释为什么会发生这种情况,最重要的是是否有解决方法?为了演示问题,这里有一个简单的测试结构publicstructStructure{privateint_Value;publicStructure(intiValue){_Value=iValue;}publicvoidChange(intiValue){_Value=iValue;}publicasyncTaskChangeAsync(intiValue){awaitTask.Delay(1);_Value=iValue;}}现在,让我们使用该结构并进行以下调用varsIns

c# - 异步打开第二个 winform 但仍然作为父窗体的子窗体运行?

我正在创建一个应用程序,我想实现一个在进行冗长过程时显示的进度窗口。我创建了一个标准的Windows窗体项目,并使用默认窗体为其创建了我的应用程序。我还创建了一个新表单用作进度窗口。当我使用以下方法打开进度窗口(在函数中)时出现问题:ProgressWindow.ShowDialog();当遇到这个命令时,焦点在进度窗口上,我假设它现在是主循环正在处理事件的窗口。缺点是它会阻止我在主窗体中执行冗长的操作。如果我使用以下方法打开进度窗口:ProgressWindow.Show();然后窗口正确打开,现在不会阻止主窗体的执行,但它不会作为子(模态)窗口应该,即允许选择主窗体,不以父窗体为中

c# - 为什么在使用异步方法时会捕获类作用域变量,而在使用 Action<T> 时却不会(内部代码示例)?

遛狗的时候我在想Action,Func,Task,async/await(是的,Nerd,我知道……)并在脑海中构建了一个小测试程序,想知道答案是什么。我注意到我不确定结果,所以我创建了两个简单的测试。这是设置:我有一个类作用域变量(字符串)。它被分配了一个初始值。变量作为参数传递给类方法。该方法不会直接执行,而是分配给“Action”。在Action执行之前,我更改了变量的值。输出结果是什么?初始值,还是更改后的值?有点意外但可以理解,输出是改变后的值。我的解释是:在Action执行之前,变量不会被压入堆栈,所以它将是被改变的。publicclassfoo{stringtoken;p

c# - 具有 Task.Run 性能的 ASP.NET Web API 2 异步操作方法

我正在尝试对几个ASP.NETWebAPI2.0端点进行基准测试(使用Apache基准测试)。其中一个是同步的,一个是异步的。[Route("user/{userId}/feeds")][HttpGet]publicIEnumerableGetNewsFeedItemsForUser(stringuserId){return_newsFeedService.GetNewsFeedItemsForUser(userId);}[Route("user/{userId}/feeds/async")][HttpGet]publicasyncTask>GetNewsFeedItemsForUse

c# - 我应该对每个返回任务的方法使用异步/等待吗

这个问题在这里已经有了答案:Whyuseasyncandreturnawait,whenyoucanreturnTaskdirectly?(8个答案)关闭4个月前。假设我有一个C#Controller,它调用某个返回任务的任意函数(例如,因为它执行数据库事务)。我应该始终使用async和await,还是应该只返回任务?示例Controller:publicasyncTaskDoSomething(){returnawaitSomeOtherFunctionThatReturnsATask();}我应该把它改成:publicTaskDoSomething(){returnSomeOthe

c# - 为什么 WebClient.DownloadStringTaskAsync() 会阻塞? - 新的异步 API/语法/CTP

由于某种原因,下面的程序启动后有一个暂停。我相信WebClient().DownloadStringTaskAsync()是原因。classProgram{staticvoidMain(string[]args){AsyncReturnTask();for(inti=0;iDownloadAndReturnTaskStringAsync(){returnawaitnewWebClient().DownloadStringTaskAsync(newUri("http://www.weather.gov"));}}据我所知,我的程序应该立即从0开始计数到​​15。我做错了什么吗?原始Net

c# - 异步线程安全从 MemoryCache 获取

我创建了一个使用.NETMemoryCache的异步缓存。这是代码:publicasyncTaskGetAsync(stringkey,Func>populator,TimeSpanexpire,objectparameters){if(parameters!=null)key+=JsonConvert.SerializeObject(parameters);if(!_cache.Contains(key)){vardata=awaitpopulator();lock(_cache){if(!_cache.Contains(key))//Checkagainbutlockedthist