当前位置: 首页 > 知识库问答 >
问题:

取消警告CS1998:此异步方法缺少“await”

梁成双
2023-03-14

我有一个接口,其中包含一些返回task的函数。实现接口的一些类不需要等待任何东西,而其他类可能只是抛出--因此警告是虚假的和令人讨厌的。

public async Task<object> test()
{
    throw new NotImplementedException();
}

共有1个答案

微生永春
2023-03-14

我有一个带有一些异步函数的接口。

方法返回task异步是实现细节,因此不能应用于接口方法。

实现接口的一些类没有任何东西要等待,而一些类可能只是抛出。

public Task<int> Success() // note: no "async"
{
  ... // non-awaiting code
  int result = ...;
  return Task.FromResult(result);
}
public Task<int> Fail() // note: no "async"
{
  var tcs = new TaskCompletionSource<int>();
  tcs.SetException(new NotImplementedException());
  return tcs.Task;
}
public static class TaskConstants<TResult>
{
  static TaskConstants()
  {
    var tcs = new TaskCompletionSource<TResult>();
    tcs.SetException(new NotImplementedException());
    NotImplemented = tcs.Task;
  }

  public static Task<TResult> NotImplemented { get; private set; }
}

public Task<int> Fail() // note: no "async"
{
  return TaskConstants<int>.NotImplemented;
}

helper类还减少了GC必须收集的垃圾,因为具有相同返回类型的每个方法可以共享其TaskNotimPlementedException对象。

我的AsyncEx库中还有其他几个“任务常量”类型的示例。

 类似资料: