草庐IT

C#有异步函数调用同步函数或者同步函数调用异步函数

我正在编写一个C#.Net4.5库来执行常见的sql数据库操作(备份、恢复、执行脚本等)。我希望每个操作都有同步和异步功能,因为这个库将被控制台和GUI应用程序使用,但我不想在任何地方重复代码。所以在我看来,我有两个选择:在同步函数中编写完成工作的代码,然后将其包装在异步函数的任务中,如下所示:publicvoidBackupDB(stringserver,stringdb){//Doalloftheworkandlongrunningoperationhere}publicasyncTaskBackupDBAsync(stringserver,stringdb){awaitTask.

c# - 带有 await 的异步 lambda 表达式返回任务?

我有以下代码://Getallofthefilesfromthelocalstoragedirectory.varfiles=awaitfolder.GetFilesAsync();//Mapeachfiletoastreamcorrespondingtothatfile.varstreams=files.Select(asyncf=>{returnawaitf.OpenStreamForWriteAsync();});我希望streams类型为IEnumerable但实际上是IEnumberable>,如果我省略了await关键字,这就是我所期望的。OpenStreamForWrit

c# - 异步使用同步 WCF 服务

我目前正在将客户端应用程序迁移到.NET4.5以使用async/await。该应用程序是当前仅提供同步服务的WCF服务的客户端。我现在想知道,我应该如何异步使用这个同步服务?我正在使用channelfactories使用在服务器和客户端之间共享的服务契约(Contract)连接到WCF服务。因此,我无法使用VisualStudio或svcutil的自动生成来生成异步客户端代理。我已阅读thisrelatedquestion这是关于是否使用Task.Run在客户端包装同步调用,或者是否改为使用异步方法扩展服务契约。答案表明,服务器提供“真正的”异步方法对客户端性能更好,因为没有线程必须主

c# - 使用 FileStream.ReadAsync() 时,我应该以异步模式打开文件吗?

为FileStream执行异步I/O的旧.Net方法是使用FileStream.BeginRead()和FileStream.EndRead().FileStream.BeginRead()的MSDN文档指出:FileStreamprovidestwodifferentmodesofoperation:synchronousI/OandasynchronousI/O.Whileeithercanbeused,theunderlyingoperatingsystemresourcesmightallowaccessinonlyoneofthesemodes.Bydefault,FileS

c# - 单击按钮期间是否可以等待异步任务?

我的应用程序中有一个刷新按钮,它使用一些异步方法来更新显示的项目列表。问题是我不能为按钮单击的事件处理程序返回Task类型,所以我只剩下一个asyncvoid方法。因此,用户可以点击刷新按钮,然后在重新填充列表时选择一个项目,这将导致错误。处理按钮点击的代码开始:privateasyncvoidButton_Click_1(objectsender,RoutedEventArgse){awaitViewModel.CreateMessageCommand();那么有什么方法可以正确地等待这个任务完成吗? 最佳答案 由于控件的事件处理

c# - MVC 4 Controller 中的异步和等待

每次我尝试使用新的Async和Await运算符并从数据库返回对象集合时,我都会得到一个InvalidOperation异常(exception)。当我用它只返回一个项目时,它工作正常。Controller代码:publicasyncTaskEnvironmentList(){EfEnvironmentDataAccessdataAccess=newEfEnvironmentDataAccess();ICollectionenvironments=awaitdataAccess.GetAllEnvironmentsAsync();returnPartialView(environment

c# - ASP.NET Identity 2 UserManager 让所有用户异步

有人能告诉我是否有办法让ASP.NETIdentity2中的所有用户异步吗?在UserManager.Users中没有任何异步或发现所有异步或类似的东西 最佳答案 无法直接使用UserManager类异步执行此操作。您可以将其包装在您自己的异步方法中:(这可能有点邪恶)publicasyncTask>GetUsersAsync{returnawaitTask.Run(()=>{returnuserManager.Users();}}或者使用ToListAsync扩展方法:publicasyncTask>GetUsersAsync()

c# - 异步等待 Task.Run 与 HttpClient.GetAsync

我是c#5异步功能的新手。我试图了解这两种实现之间的区别:实现1:privatevoidStart(){foreach(varurlinurls){ParseHtml(url);}}privateasyncvoidParseHtml(stringurl){varquery=BuildQuery(url);//BuildQueryissomehelpermethodvarhtml=awaitDownloadHtml(query);//...MyTypeparsedItem=ParseHtml(html);SaveTypeToDB(parsedItem);}privateasyncTask

c# - ASP.NET Core 的 ActionFilterAttribute 中的异步 OnActionExecuting

ASP.NETCore的ActionFilterAttribute有这些:publicvirtualvoidOnActionExecuting(ActionExecutingContextcontext);publicvirtualvoidOnActionExecuted(ActionExecutedContextcontext);publicvirtualTaskOnActionExecutionAsync(ActionExecutingContextcontext,ActionExecutionDelegatenext);我需要OnActionExecuting的异步版本,它不存在

c# - 从以 Task 为返回类型的非异步方法返回什么?

假设我有一个不是异步但返回一个Task的方法(因为定义来自一个也用于异步实现的接口(interface))publicTaskDoWorkAsync(Guidid){//dotheworkreturn...;}返回的最佳对象是什么?我目前的选择:returnTask.Yield();returnTask.FromResult(null);//anyoftheotherbutcachedinastaticfieldandreused. 最佳答案 在Microsoft.net4.6中,Task类具有用于此目的的静态属性。任务.Compl