相关疑难解决方法(0)

抑制警告CS1998:这种异步方法缺少"等待"

我有一个带有一些异步功能的接口.实现该接口的一些类没有任何东西需要等待,有些可能只是抛出.所有警告都有点烦人.

不在异步函数中使用await时.

是否有可能压制消息?

public async Task<object> test()
{
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

警告CS1998:此异步方法缺少'await'运算符并将同步运行.考虑使用'await'运算符等待非阻塞API调用,或'await Task.Run(...)'在后台线程上执行CPU绑定工作.

asynchronous

88
推荐指数
7
解决办法
5万
查看次数

等待Task.CompletedTask什么?

我使用在Build2017中引入的Windows Template Studio创建了UWP应用程序.

下面的类是它生成的代码的一部分.

public class SampleModelService
{
    public async Task<IEnumerable<SampleModel>> GetDataAsync()
    {
        await Task.CompletedTask; // <-- what is this for?
        var data = new List<SampleModel>();

        data.Add(new SampleModel
        {
            Title = "Lorem ipsum dolor sit 1",
            Description = "Lorem ipsum dolor sit amet",
            Symbol = Symbol.Globe
        });

        data.Add(new SampleModel
        {
            Title = "Lorem ipsum dolor sit 2",
            Description = "Lorem ipsum dolor sit amet",
            Symbol = Symbol.MusicInfo
        });
        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,await Task.CompletedTask;代码的目的和原因在这里是什么?它实际上没有Task结果接收器.

c# task async-await uwp windows-10-universal

15
推荐指数
1
解决办法
9145
查看次数

返回已完成任务的最佳方式是什么?

返回已完成Task对象的最佳方式是什么?

可以写Task.Delay(0),或者Task.FromResult<bool>(true)其他什么。

但最有效的方法是什么?

.net c# task-parallel-library c#-5.0 .net-4.5

4
推荐指数
1
解决办法
3688
查看次数

如果其中一个被更改,我是否应该将每个控制器方法更改为异步?

有这个控制器文件 SecretAuthController.cs

    public class SecretAuthController : Controller 
    {
          public ActionResult Auth()
          {
               //library method whose signature recently changed to async

              return ProcessTelemetry();
          }        
    }
Run Code Online (Sandbox Code Playgroud)

所以,我的同事将此代码更改为

        public class SecretAuthController : MyBaseController
        {
              public Async Task<ActionResult> Auth()
              {
                   //library method whose signature recently changed to async                  
                   await MyLib.GetTaskDetails(Id);
                   return ProcessTelemetry();
              }        
        }
Run Code Online (Sandbox Code Playgroud)

在此过程中,他们还将所有其他控制器方法签名也更改为使用 1 async

所以,有些方法看起来像

     public Async Task<ActionResult> ExFooTest()
     {
           //There is no awaitable call here
           //normally returns.
     }
Run Code Online (Sandbox Code Playgroud)

对此有几点疑问:

  1. 如果没有 awaitable 调用,更改方法签名以使用async是否明智?
  2. 如果我们想更改一个操作方法签名以使用async,是否需要更改所有操作方法签名,这是一个通用规则吗?(假设他们不等待

.net c# asp.net-mvc asynchronous async-await

3
推荐指数
1
解决办法
483
查看次数