相关疑难解决方法(0)

如何在VS2017 RC中使用新的异步语义?

Visual Studio 2017 RC发行说明引用

语言扩展和分析器

此版本包括一些我们正在为下一版本的C#和Visual Basic工作的新语言扩展.默认情况下启用这些新语言功能,包括:

对于C#:

它说它默认启用,但我无法让它工作.甚至从链接的Github页面下载精确的ArbitraryAsyncReturns.zip(并修复对React NuGet包的引用以删除不相关的错误),但是没有安装自定义VSIX包(用于VS2015),我继续得到

错误CS1983:异步方法的返回类型必须为void,Task或Task <T>

我是否需要采取任何其他步骤才能使其正常工作?


我首先尝试将该特定示例缩减为应该起作用的最小版本,但尝试使用它,我还不知道应该使用什么,什么不应该.至少,鉴于这种语言增强,我期待一个虚假的程序,如

struct Test { }
static class Program {
    static async Test Test() { }
    static void Main() { }
}
Run Code Online (Sandbox Code Playgroud)

无法使用不同的错误消息进行编译.获得相同的错误消息,甚至提示此语言扩展尚未启用,但JaredPar注意到错误消息尚未更新.


我现在将一个所谓的有效示例减少到我认为应该编译的最小版本(但由于未实现的方法而在运行时失败),但是不编译:

using System;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;

namespace System.Runtime.CompilerServices {
    public class TasklikeAttribute : Attribute {
        public TasklikeAttribute(Type builderType) { }
    }
}

struct TasklikeTypeMethodBuilder<T> {
    public static TasklikeTypeMethodBuilder<T> Create() => throw new NotImplementedException();
    public void Start<TStateMachine>(ref …
Run Code Online (Sandbox Code Playgroud)

c# async-await c#-7.0 visual-studio-2017

11
推荐指数
2
解决办法
1174
查看次数

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

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

async MyAwaitable MyAwaitableMethod()
{
    await myAwaitable;
}

async Task MyTask()
{
    await MyAwaitableMethod();
}
Run Code Online (Sandbox Code Playgroud)

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

[编辑]

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

  1. https://github.com/dotnet/roslyn/issues/7169
  2. https://github.com/dotnet/roslyn/issues/10902
  3. 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/

c# async-await

1
推荐指数
1
解决办法
1316
查看次数

标签 统计

async-await ×2

c# ×2

c#-7.0 ×1

visual-studio-2017 ×1