草庐IT

异步FIFO

全部标签

c# - 将库重构为异步,如何避免重蹈覆辙?

我有这样一个方法:publicvoidEncrypt(IFilefile){if(file==null)thrownewArgumentNullException(nameof(file));stringtempFilename=GetFilename(file);using(varstream=newFileStream(tempFilename,FileMode.OpenOrCreate)){this.EncryptToStream(file,stream);file.Write(stream);}File.Delete(tempFilename);}不过,我想写另一个方法,非常相

c# - 为什么我必须使用等待异步运行的方法。如果我不想在继续之前等待方法完成怎么办?

这个问题在这里已经有了答案:Fire-and-forgetwithasyncvs"oldasyncdelegate"(5个答案)关闭7年前。我整天都在翻阅MSDN文档,他们的异步编码理念让我感到困惑。据我了解,如果调用异步方法,调用异步方法的线程不会被阻塞。然而,async在示例中总是与await配对,这似乎否定了异步性,使得外部方法无论如何都必须等待代码执行。我不应该能够调用异步方法然后继续执行外部方法吗?我或多或少遇到过这种情况:voidreportSomethingHappened(info)-Collectinfo-HTTPPOSTinfotologgingserver(ie.

c# - 如何对在 MVVM 中调用异步方法的 DelegateCommand 进行单元测试

我是单元测试MVVM的新手,在我的项目中使用PRISM。我正在对我们当前的项目实现单元测试,但没有幸运地在线找到可以告诉我如何测试调用异步方法的DelegateCommand的资源。这是我的帖子的后续问题-HowtoUnitTestaViewModelwithasyncmethod.关于如何在MVVM中对异步方法进行单元测试,并回答说公共(public)方法可以使用异步TestMethod进行测试。仅当我要测试的方法是公共(public)方法时,此方案才有效。问题是我想测试我的DelegateCommand,因为这是我想在其他类上公开的唯一公开细节,其他所有内容都是私有(private

c# - 强制调用一次异步方法

假设我有一个类需要使用InitializeAsync()方法执行一些异步初始化。我想确保只执行一次初始化。如果另一个线程在初始化过程中调用此方法,它将“等待”直到第一个调用返回。我正在考虑以下实现(使用SemaphoreSlim)。有更好/更简单的方法吗?publicclassMyService:IMyService{privatereadonlySemaphoreSlimmSemaphore=newSemaphoreSlim(1,1);privateboolmIsInitialized;publicasyncTaskInitializeAsync(){if(!mIsInitializ

c# - MVC Controller 的操作中的异步/等待

我在ASP.netMVCController中有一个Index操作。此操作调用(除其他事项外)对具有大量行的SQL表进行计数的私有(private)操作。返回的数字将插入到View包属性中。publicActionResultIndex(){//dothingsViewBag.NumberOfRows=NumberOfRows();returnView();}privatestringNumberOfRows(){//sqlconnectionandrowcountreturnnumberOfRows;}这行得通,但在执行所有内容之前我看不到索引页面,甚至是行数。相反,我会立即完成In

c# - C# 中类型安全的即发即弃异步委托(delegate)调用

我最近发现自己需要一种类型安全的“即发即弃”机制来异步运行代码。理想情况下,我想做的是:varmyAction=(Action)(()=>Console.WriteLine("yadayada"));myAction.FireAndForget();//asyncinvocation不幸的是,调用BeginInvoke()的明显选择没有相应的EndInvoke()不起作用-它会导致缓慢的资源泄漏(因为异步状态由运行时保持并且从未释放......它期待最终调用EndInvoke()。我也无法在.NET线程上运行代码池,因为它可能需要很长时间才能完成(建议只在线程池上运行相对较短生命周期的

c# - 异步/等待和缓存

我的服务层正在将大量Db请求缓存到memcached,这是否导致无法使用Async/Await??例如,我怎么能等待这个?publicvirtualStoreGetStoreByUsername(stringusername){return_cacheManager.Get(string.Format("Cache_Key_{0}",username),()=>{return_storeRepository.GetSingle(x=>x.UserName==username);});}注意:如果缓存中存在键,它将返回一个“Store”(不是Task),如果缓存中不存在键,它将执行lam

c# - 如何将 CancellationTokenSource 附加到 DownloadStringTaskAsync 方法并取消异步调用?

我正在创建一个示例示例以使用WebClient使用异步和等待方法调用链接,现在我还想附加取消异步调用功能。但我无法获取CancellationTokenSourcetoken并将DownloadStringTaskAsync附加到此取消token。以下是我的代码,任何人都可以告诉我如何完成此操作。privateasyncvoidDoWork(){this.Cursor=Cursors.WaitCursor;Write("DoWorkstarted.");cts=newCancellationTokenSource();WebClientwc=newWebClient();stringr

c# - 将 await 与异步数据库调用一起使用有什么好处

我只是在查看默认的MVC5项目以及它如何在Controller中使用异步。我想知道与简单地使用同步调用相比,异步在这里提供了哪些好处:[HttpPost][ValidateAntiForgeryToken]publicasyncTaskDisassociate(stringloginProvider,stringproviderKey){ManageMessageId?message=null;//whyuseanasyncdatabasecallherewithawaitinsteadofjustusingasynchronousone?IdentityResultresult=aw

c# - 等待/异步引用错误

我正在尝试在某些返回字符串的函数中执行一些异步操作。asyncprivatevoidbutton1_Click(objectsender,EventArgse){stringoutput=awaitthr_calc(this,null);}asyncprivateTaskthr_calc(objectsender,EventArgse){returnawaitzzztest();}stringzzztest(){stringasd;//somestuffherereturnasd;}但它在每个包含单词async/await的字符串上给我错误!我在Windows桌面上使用俄语版的msvs