C#编译器要求我使我的函数可以等待,但它已经是?

问题描述:

此线C#编译器要求我使我的函数可以等待,但它已经是?

success = await _myHid.SendOutputReportViaInterruptTransfer(_deviceData, _hidHandle, outputReportBuffer); 

给我此错误错误

在“等待”操作符只能异步方法内使用。考虑使用“异步”修饰符标记此方法,并将其返回类型更改为“任务”。 S:\ blissbox \ SOURCE_FILES \ Bliss-Box_api \ managed dx attempt \ BBAPI.cs 40

这里是我的方法。

internal async Task<Boolean> SendOutputReportViaInterruptTransfer 
      (FileStream fileStreamDeviceData, SafeFileHandle hidHandle, Byte[] outputReportBuffer) 
     { 
      try 
      { 
       var success = false; 

        // Begin writing the Output report. 

        Task t = fileStreamDeviceData.WriteAsync(outputReportBuffer, 0, outputReportBuffer.Length); 

        await t; 

        // Gets to here only if the write operation completed before a timeout. 

        Debug.Print("Asynchronous write completed"); 

        // The operation has one of these completion states: 

        switch (t.Status) 
        { 
         case TaskStatus.RanToCompletion: 
          success = true; 
          Debug.Print("Output report written to device"); 
          break; 
         case TaskStatus.Canceled: 
          Debug.Print("Task canceled"); 
          break; 
         case TaskStatus.Faulted: 
          Debug.Print("Unhandled exception"); 
          break; 
        } 

       return success; 
      } 
      catch (Exception ex) 
      { 
       DisplayException(ModuleName, ex); 
       throw; 
      } 
     } 

我做错了什么?

+1

编译器要求你做的方法从你也调用'SendOutputReportViaInterruptTransfer'' async'。 – dasblinkenlight

+0

当你在你的项目中引入'async'时,你需要使'async'完成。换句话说,就像在Task.Run(async()=> {...})任务中封装调用一样;''你需要使所有的调用函数都是'async',并且所有的调用函数都是调用函数'async',一直在链上。 – lebelinoz

问题是被调用函数的位置。这意味着,你叫下面的代码是不是一个异步函数:

success = await _myHid.SendOutputReportViaInterruptTransfer(_deviceData, _hidHandle, outputReportBuffer); 

一种解决方案可以这样调用异步函数如下:

var task = TaskEx.RunEx(async() => 
{ 
    await _myHid.SendOutputReportViaInterruptTransfer(_deviceData, _hidHandle, outputReportBuffer); 
}); 
var result = task.WaitAndUnwrapException(); 
+0

哇,我从来没有得到这种形式的S.O.上的所有线程。我读到这个,thx家伙。 –