我正在覆盖基类库中的一个方法。但是,在我重写的实现中,我使用的是新的HttpClient,它全部基于异步方法。因此,我必须将我的方法标记为异步,这意味着我需要将方法的返回参数从字符串更改为任务。然而,编译器给出了一个错误:“返回类型必须是‘字符串’才能匹配覆盖的成员……”publicclassBaseClass{publicvirtualstringGetName(){...}}publicclassMyClass:BaseClass{publicoverrideasyncTaskGetName(){HttpClienthttpClient=newHttpClient();varres
我有一个异步方法:publicasyncTaskGetBitmapAsync(double[]pixels);假设我也有这门课:publicclassPixelData{publicdouble[]Pixels{get;}}我现在想创建一个生成BitmapSource的便捷方法输出,使用上面的异步方法来完成工作。我至少可以想出三种方法来做到这一点,但从效率和可靠性的角度来看,我并不清楚应该选择哪一种。有人可以指教吗?以下每种方法的优点和缺点是什么?选项A创建一个返回Result的同步方法的Task:publicBitmapSourceGetBitmap(PixelDatapixelDa
总结:在库方法中,什么时候应该使用async和await关键字而不是返回Task直接?我相信我的问题与thisone有关.但是,这个问题是关于.NET4.0的。和TPL,同时我将.NET4.6与async一起使用和await关键字。因此,我认为我的问题可能会得到不同的答案,因为在回答链接问题时这些关键字不存在。说明:我正在为外部WCF服务编写一个简单的包装器,该包装器生成多个SendAsync电话。现在我认为每个包装器方法应该只返回一个Task。直接不用等待。我的理解是async/await应该在应用层使用,不在库中使用。因此,例如,这是我认为我应该为每个包装器方法采用的方法:priv
这可能是一个非常愚蠢的问题,但我有以下代码行可以将RAW图像转换为BitmapImages:publicasyncvoidCreateImageThumbnails(stringimagePath,intimgId){awaitTask.Run(()=>controlCollection.Where(x=>x.ImageId==imgId).FirstOrDefault().ImageSource=ThumbnailCreator.CreateThumbnail(imagePath));}调用此方法CreateThumbnail()publicstaticBitmapImageCrea
将异步方法标记为未实现/不支持或无效操作的正确方法是什么。为简单起见,我将在示例中仅使用NotImplementedException,但该问题也适用于NotSupportedException和InvalidOperationException。以一种同步的方式,一个人会简单地抛出异常:publicoverridevoidX(){thrownewNotImplementedException();}在异步世界中这段代码相当于什么?/*1*/publicoverrideTaskXAsync(){thrownewNotImplementedException();}或者/*2*/publ
我想对一个执行异步操作的方法进行单元测试:Task.Factory.StartNew(()=>{//methodtotestandreturnvaluevarresult=LongRunningOperation();});我在我的单元测试(用c#编写)中stub了必要的方法等,但问题是在我断言测试之前异步操作没有完成。我该如何解决这个问题?我应该创建TaskFactory的模拟或任何其他技巧来对异步操作进行单元测试吗? 最佳答案 您必须有某种方法来伪造任务创建。如果您将Task.Factory.StartNew调用移动到某个依赖项
我只想将调用发送到SQLServer,而不是等待返回。我有一个从存储过程导入的实体函数,我想在EntityFramework6.0.0-rc1中以这种方式异步调用它。这可能吗?语法是什么?EntityFunction:RecalculateBudgetNumbers(intid) 最佳答案 启动一个新的Task,创建一个新的数据上下文并调用该函数。只是不要等待/等待该任务。让它自己运行直到完成。确保记录错误。不要吞下异常,因为它们可能是您想了解的错误。在ASP.NET设置中,请注意工作进程可以随时回收,因此您的后台工作可能会突然消失
老读者,第一次张贴在这里。我的目标:能够在使用WebBrowser类时利用async/await。由于WebBrowser.Navigate(stringurl)是一种异步方法,在触发LoadComplete事件之前您无法检查html文档。到目前为止,这是我的(工作)代码:publicclassAsyncWebBrowser{protectedWebBrowserm_WebBrowser;privateManualResetEventm_MRE=newManualResetEvent(false);publicvoidSetBrowser(WebBrowserbrowser){this
我有以下mvc操作。publicasyncTaskDoSomeLongRunningOperation(){returnawaitTask.Run(()=>{//Doalotoflongrunningstuff//TheunderlyingframeworkusestheHttpContext.Current.User.Identity.Namesotheuserispassedonthemessagebus.}}在任务中,HttpContext变为空。我们做了很多欺骗,但没有任何东西可以确保HttpContext在我们的新线程中始终可用。是否有在异步任务中使用HttpContext的
是否可以通过C#异步调用SQLServer存储过程?我有一个写入特定数据库备份的存储过程(这可能需要很长时间才能完成),我想在Windows窗体中显示备份过程的进度(为此我使用http://www.wisesoft.co.uk/articles/tsql_backup_restore_progress.aspx).或者我应该使用Backgroundworker控件并在后台作业(自己的线程)中运行SP? 最佳答案 在您的SqlCommand中,您可以使用BeginExecuteNonQuery和EndExecuteNonQuery异步