C# 为什么.NET中异步调用的返回类型是IAsyncResult?

C# 为什么.NET中异步调用的返回类型是IAsyncResult?,c#,.net,C#,.net,我只是想知道为什么c#中异步调用的返回类型是IAsynceSult?它还会是什么?这不可能是电话的“最终”结果,因为这还不清楚。基本上,它是一个表示异步调用的值,因此您可以稍后确定调用是否完成,结果如何等等 遗憾的是,对于非void异步调用,它不是泛型的(在结果类型中),但这是由于.NET1的遗留版本不支持泛型 编辑:我最初几乎提到了任务。问题是,在很多地方,方法已经声明返回IAsyncResult,而您不能只改变API的左、右和中。我偶尔会想,如果微软在发布之前等待泛型,那么.NET会更干净多

我只是想知道为什么c#中异步调用的返回类型是IAsynceSult?

它还会是什么?这不可能是电话的“最终”结果,因为这还不清楚。基本上,它是一个表示异步调用的值,因此您可以稍后确定调用是否完成,结果如何等等

遗憾的是,对于非void异步调用,它不是泛型的(在结果类型中),但这是由于.NET1的遗留版本不支持泛型


编辑:我最初几乎提到了任务。问题是,在很多地方,方法已经声明返回
IAsyncResult
,而您不能只改变API的左、右和中。我偶尔会想,如果微软在发布之前等待泛型,那么.NET会更干净多少。当然,这类论点总是适用的,但对于泛型来说,它尤其重要。

还有什么其他理由?这不可能是电话的“最终”结果,因为这还不清楚。基本上,它是一个表示异步调用的值,因此您可以稍后确定调用是否完成,结果如何等等

遗憾的是,对于非void异步调用,它不是泛型的(在结果类型中),但这是由于.NET1的遗留版本不支持泛型


编辑:我最初几乎提到了任务。问题是,在很多地方,方法已经声明返回
IAsyncResult
,而您不能只改变API的左、右和中。我偶尔会想,如果微软在发布之前等待泛型,那么.NET会更干净多少。当然,这种类型的参数总是适用的,但对于泛型,它在我看来尤其重要。

IAsyncResult提供了监视异步调用进度的能力,并提供了一个“令牌”,该令牌稍后可以传递给您通常看到的异步方法对的“Complete\uuuuu”方法

由于异步调用无法返回操作的实际值,因此此接口为该调用的状态提供了一个容器,以便稍后获得结果


当考虑到可能有多个对同一方法的异步调用尚未完成时,这一点尤其重要-IAsyncResult实例有助于分别识别每个异步调用。

IAsyncResult提供了监视异步调用进度的功能,以及提供一个“令牌”,该令牌稍后可以传递给您通常看到的异步方法对的“Complete\uuuuuuu”方法

由于异步调用无法返回操作的实际值,因此此接口为该调用的状态提供了一个容器,以便稍后获得结果


当考虑到对同一方法的多个异步调用可能尚未完成时,这一点尤其重要-IAsyncResult实例有助于分别识别每个异步调用。

因为它是一个异步调用,实际的最终结果尚不清楚。因此,返回类型本质上是您对所做调用的引用,因此您可以跟踪调用何时完成


把它想象成一张票,当你把一个包裹投下,通过记录/跟踪的投递方式投递时,你会得到一张票——这张票给了你一种检查投递进度并在以后跟进的方法。

因为这是一个异步调用,实际的最终结果还不知道。因此,返回类型本质上是您对所做调用的引用,因此您可以跟踪调用何时完成


可以把它想象成一张通过记录/跟踪交付方式交付包裹的罚单——该罚单为您提供了一种检查交付进度并随后跟进的方法。

因为经典的异步模式实现


IAsyncResult对象从Begin方法返回,表示单个异步操作。它包含一些方法和属性,提供对异步操作的一些基本信息的访问。

因为经典的异步模式实现


IAsyncResult对象从Begin方法返回,表示单个异步操作。它包含一些方法和属性,可以访问有关异步操作的一些基本信息。

进行异步调用就像让某人在方便的时候去做某事。IAsyncResult是该请求的句柄。您可以使用它来等待任务完成,查询进度,并从任务中获取任何结果和/或异常。你更喜欢什么?

打一个异步电话就像让某人在方便的时候去做某事。IAsyncResult是该请求的句柄。您可以使用它来等待任务完成,查询进度,并从任务中获取任何结果和/或异常。你更喜欢什么?

@Praveen:这个问题与C#无关。VB.NET中异步调用的返回类型与所有.NET语言中的返回类型相同。这是因为它不是一种语言特性,而是一种.NET特性。看到区别了吗?@Praveen:这个问题与C无关。VB.NET中异步调用的返回类型与所有.NET语言中的返回类型相同。这是因为它不是一种语言特性,而是一种.NET特性。看到区别了吗?我同意-泛型显然提供了一个更好的解决方案,令人遗憾的是.Net框架的这一领域从一开始就被忽视了这么多。也就是说,在整个框架中进行更改可能是一个相当可怕的过程,所以我不怪他们犹豫!当然,PFX确实提供了这样一个通用的返回:
Task.Factory.fromsync
返回一个
Task
,而
Task
实现
IAsyncResult
。最后