gpt4 book ai didi

c# - 抑制警告 CS1998 : This async method lacks 'await'

转载 作者:行者123 更新时间:2023-12-03 05:02:44 27 4
gpt4 key购买 nike

我有一个带有一些返回Task的函数的接口(interface)。一些实现该接口(interface)的类没有任何等待的内容,而其他类可能只是抛出异常 - 因此这些警告是虚假且烦人的。

是否可以抑制这些警告?例如:

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

产量:

warning CS1998: This async method lacks 'await' operators and will runsynchronously. Consider using the 'await' operator to awaitnon-blocking API calls, or 'await Task.Run(...)' to do CPU-bound workon a background thread.

最佳答案

I've got an interface with some async functions.

返回Task的方法,我相信。 async 是一个实现细节,因此它不能应用于接口(interface)方法。

Some of the classes that implements the interface does not have anything to await, and some might just throw.

在这些情况下,您可以利用 async 是实现细节这一事实。

如果您没有什么可以等待,那么您可以直接返回Task.FromResult:

public Task<int> Success() // note: no "async"
{
... // non-awaiting code
int result = ...;
return Task.FromResult(result);
}

在抛出NotImplementedException的情况下,过程有点啰嗦:

public Task<int> Fail() // note: no "async"
{
var tcs = new TaskCompletionSource<int>();
tcs.SetException(new NotImplementedException());
return tcs.Task;
}

如果你有很多方法抛出NotImplementedException(这本身可能表明一些设计级重构会很好),那么你可以将这些冗长的内容包装到一个辅助类中:

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;
}

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

我还有其他几个"task constant" type examples in my AsyncEx library .

关于c# - 抑制警告 CS1998 : This async method lacks 'await' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com