当前位置:  开发笔记 > 编程语言 > 正文

是否有可能让C#异步方法返回类型不是Task <T>或void?

如何解决《是否有可能让C#异步方法返回类型不是Task<T>或void?》经验,为你挑选了1个好方法。

似乎GetAwaiter可以等待任何实现需求的对象,Task<>类型只是满足此要求的众多可能类型之一.但是,似乎一种async方法只能返回Task<>void据我所知.是否有可能挂钩我的自定义任务等待类型,所以我可以指定我的自定义等待类型作为异步返回类型,然后当然我可以随后await链接通常的调用链.像:(伪代码)

async MyAwaitable MyAwaitableMethod()
{
    await myAwaitable;
}

async Task MyTask()
{
    await MyAwaitableMethod();
}

背景信息:整个想法实际上源于C++ 1z/2x协程提案,它基本上具有相同的基本模型,但它允许更多控制来定义promise_type从协程返回嵌入的任何类型(因此的co_await).

[编辑]

除了答案中提供的链接之外,我还在以下链接中找到了更多信息,似乎确实有一些关于这个主题的热门讨论:

    https://github.com/dotnet/roslyn/issues/7169

    https://github.com/dotnet/roslyn/issues/10902

    https://github.com/ljw1004/roslyn/blob/features/async-return/docs/specs/feature%20-%20arbitrary%20async%20returns%20-%20discussion.md

[EDIT2]

令人惊讶的是,在进一步挖掘之后,这实际上是C#7.0的一个预期功能:http://intellitect.com/generalized-async-return-types/



1> Eric Lippert..:

您想要的功能不存在.它已被提出,我相信有一个原型实现.看到

https://github.com/dotnet/roslyn/issues/16476

为设计说明.

如果您对此主题感兴趣,请考虑在Kotlin中查看广义协程功能的设计工作.好东西在这里.

https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有