1

考虑以下代码:

public class AsyncRequestHandler : IHttpAsyncHandler
{
   public void EndProcessRequest(IAsyncResult result)
   {
     if (result == null)
     {
       ...
     }
     ...
   }
}

ReSharper 建议result永远不会null(通过指示条件始终为假)。但是,因为IAsyncResult是引用类型,null所以是可能的值。我想出了两种可能:

  • 某种可用的元数据允许 ReSharper 得出结论,这result是永远不可能的null。查看IHttpAsyncHandler使用 ReSharper 的源代码,我没有看到任何与EndProcessRequest.
  • ReSharper 知道这些IHttpAsyncHandler保证IAsyncResult永远不会是null. 但是,无论哪种方式,文档都没有提供任何线索。

IAsyncResult不会为 null似乎是合理的,因为它允许我们跟踪异步任务的进度。有人可以提供一些见解吗?

4

1 回答 1

0

IHttpAsyncHandler是旧式异步编程模型的一个例子。

也许 ReSharper 旨在识别模式。

笔记:

未定义多次调用End OperationName方法相同的效果。IAsyncResult同样,使用相关Begin方法未返回的End OperationName方法也未定义。IAsyncResult

因此,您不必编写代码来处理没有正确调用您的代码的人,遵循这种模式。

于 2015-11-10T09:29:03.017 回答