Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 忽略异步而不等待编译警告_C#_Visual Studio 2012_Asp.net Web Api_Async Await_Task Parallel Library - Fatal编程技术网

C# 忽略异步而不等待编译警告

C# 忽略异步而不等待编译警告,c#,visual-studio-2012,asp.net-web-api,async-await,task-parallel-library,C#,Visual Studio 2012,Asp.net Web Api,Async Await,Task Parallel Library,我有一个具有以下抽象方法的基本控制器: [HttpDelete] public abstract Task<IHttpActionResult> Delete(int id); 这将删除警告。然而,有更好的解决办法吗 除了忽略上述警告之外,还有更好的选择吗 (即更改上述代码)以避免出现此警告 另一种方法是删除async修饰符并使用Task.FromResult返回任务: 公共覆盖任务删除(int-id) { 返回Task.FromResult( ResponseMessage(Re

我有一个具有以下抽象方法的基本控制器:

[HttpDelete]
public abstract Task<IHttpActionResult> Delete(int id);
这将删除警告。然而,有更好的解决办法吗

除了忽略上述警告之外,还有更好的选择吗 (即更改上述代码)以避免出现此警告

另一种方法是删除
async
修饰符并使用
Task.FromResult
返回
任务

公共覆盖任务删除(int-id)
{
返回Task.FromResult(
ResponseMessage(Request.CreateResponse(
HttpStatusCode.MethodNotAllowed,
新的NotSupportedException());
}
关于完全删除
异步
通常是删除警告的首选方式,另一个不会降低性能的正确答案是等待已完成的任务

await
大致翻译为检查等待的任务是否已完成,如果已完成,则继续同步执行方法的其余部分,如果未完成,则将其余部分添加为该任务的继续部分

private static readonly Task _completedTask = Task.FromResult(false);
public override async Task<IHttpActionResult> Delete(int id)
{
    await _completedTask;
    return ResponseMessage(Request.CreateResponse(HttpStatusCode.MethodNotAllowed, new NotSupportedException()));
}
private static readonly Task\u completedTask=Task.FromResult(false);
公共覆盖异步任务删除(int-id)
{
等待完成任务;
返回响应消息(Request.CreateResponse(HttpStatusCode.MethodNotAllowed,newnotsupportedexception());
}
在.Net 4.6中,您可以使用新的
Task.CompletedTask
属性,而不是创建自己的已完成任务


这使您能够保持方法
异步
,并与之保持一致。

如果您不希望允许删除操作,为什么要从中派生?根据上述答案,我遇到以下异常:
无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task”
@Ivan MarkDebono将代码更改为
Task.FromResult(ResponseMessage(…)return await Task.Run(() => ResponseMessage(Request.CreateResponse(HttpStatusCode.MethodNotAllowed, new NotSupportedException())));
public override Task<IHttpActionResult> Delete(int id)
{
    return Task.FromResult<IHttpActionResult>(
                ResponseMessage(Request.CreateResponse(
                                        HttpStatusCode.MethodNotAllowed,
                                        new NotSupportedException())));
}
private static readonly Task _completedTask = Task.FromResult(false);
public override async Task<IHttpActionResult> Delete(int id)
{
    await _completedTask;
    return ResponseMessage(Request.CreateResponse(HttpStatusCode.MethodNotAllowed, new NotSupportedException()));
}