当前位置: 首页 > 编程语言 > C#

异步方法中的警告消息说它缺少等待运算符分享

时间:2023-04-10 11:32:43 C#

C#学习教程:异步方法中的警告消息说它缺少await运算符单击导出按钮时,将调用以下控制器方法。因为我需要它异步完成,所以我在这里使用async和await。publicasyncTaskGenerateReportExcel(){ExcelGeneratorexcel=newExcelGenerator();varfilePath=awaitexcel.ReportExcelAsync(middearReportViewModel);System.Web.HttpResponse响应=System.Web.HttpContext.Current.Response;响应.ClearContent();响应.清除();response.ContentType="text/plain";response.AddHeader("Content-Disposition",string.Format("attachment;filename={0}.xlsx;",PdaResource.ReportFileName));response.TransmitFile(文件路径);响应.Flush();响应。结束();返回PartialView("_MidYearReportPartial",middearReportViewModel);}这种方法调用excel生成器方法ReportExcelAsync,如下所示publicasyncTaskReportExcelAsync(MidYearReportViewModel_middearAnnualviewModel){stringfileName="MidYearReport";stringfinalXcelPath=string.Empty;stringcurrentDirectorypath=newDirectoryInfo(HttpContext.Current.Server.MapPath("~/Export")).ToString();finalXcelPath=string.Format("{0}\{1}.xlsx",currentDirectorypath,fileName);如果(系统tem.IO.File.Exists(finalXcelPath)){System.IO.File.Delete(finalXcelPath);}varnewFile=newFileInfo(finalXcelPath);使用(ResXResourceSetresxSet=newResXResourceSet(resxFile)){使用(varpackage=newExcelPackage(newFile)){ExcelWorksheetworksheet=package.Workbook.Worksheets.Add(resxSet.GetString("ReportMYMidYearExcelSheetName"));对于(inti=1;i<=header.Count();i++){worksheet.Cells[1,i].Value=header[i-1];worksheet.Cells[1,i].Style.Font.Bold=true;worksheet.Cells[1,i].Style.Fill.PatternType=ExcelFillStyle.Solid;worksheet.Cells[1,i].Style.Font.Color.SetColor(Color.White);worksheet.Cells[1,i].Style.Fill.BackgroundColor.SetColor(Color.DimGray);}package.Save();}}返回finalXcelPath;但我收到一条警告消息,警告此异步方法缺少“await”运算符并将同步运行考虑使用“await”运算符等待非阻塞API调用,或“awaitTask.Run(...)”以在后台线程上执行受CPU限制的工作。我做错了什么?.我的代码工作正常,我可以下载excel。难道我做错了什么?嗯,你并没有真正异步地做任何事情。ReportExcelAsync方法是完全同步的,因为它没有任何等待表达式。所以GenerateReportExcel会调用ReportExcelAsync,同步运行,然后返回完成的任务。您目前所做的只是添加少量开销来创建用于实现异步/等待等的状态机。目前尚不清楚为什么您希望它实际上是异步发生的,但我怀疑这是对等待/等待的误解异步确实如此。它不会自动为您启动新线程——它只是使创建和使用异步API变得更容易。现在一个选择是将ReportExcelAsync更改为同步方法(ReportExcel,返回一个字符串)并在调用代码中为其创建一个新任务:varfilePath=awaitTask.Run(excel.ReportExcel);但是,尚不清楚这会给您带来多少好处。您正在编写一个Web应用程序,因此它不会像这样更快地提供响应-您实际上只是在更改完成工作的线程。你说:因为我需要它异步完成......但没有理由需要异步完成。在这种情况下,同步方法有什么问题?异步在适当的时候很棒,但我认为它不适合你的情况。以上是C#学习教程:异步方法中的警告信息说缺少wait操作符共享的所有内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: