gpt4 book ai didi

.net - 使用 Async V3 而不安装它

转载 作者:行者123 更新时间:2023-12-04 05:41:44 25 4
gpt4 key购买 nike

我在我的机器上安装 VS-SP1 和 Async CTP V3 时遇到问题。出于某种原因,它会导致我在该机器上运行的任何 .NET 应用程序崩溃。 (好在我正在使用虚拟机并且可以回滚)。

我已将更新 csc.exe 文件复制到 Windows 目录中的 .NET framework 4 目录中。

当我从命令行使用 msbuild 构建我的项目时,一切都构建并且运行良好。

当我从 VS2010 中编译同一个项目时,我收到 async 关键字未知的编译时错误。

我不在乎 VS 没有突出显示 async 和 await 的语法,但是我必须从命令行构建项目确实让我感到困扰。

  • 命令行 csc 是如何工作的,但在使用 VS 时却没有?
  • 如何更改 VS 以正确编译异步代码(不安装 Async CTP 本身)?

  • 谢谢,

    我愿意。

    最佳答案

    VS2012 和 Async 目标包是最佳选择,原因如下:

  • 语法与 C#5 中的相同,使升级到 C#5 更容易。 Async CTP 有足够多的差异(TaskEx 代替 Task 类,TaskAsync 代替 Task 后缀, token 参数等),这使得升级很麻烦。不难,就是麻烦
  • 等待/异步行为更好,更接近 C#5。在 Async CTP 中,循环内部发生的异常会导致整个循环静默失败。见 Retry a task对于受此影响的场景。
  • 没有安装问题。 Async CTP 和 VS 2010 SP1 必须按特定顺序安装以避免出现问题。
  • 您可以期待 MS 为目标包提供某种支持,而您可以期待 Async 包没有。

  • 一个小小的警告是,在带有 VS2010 + Async CTP 的机器上安装 VS2012 会破坏 Async CTP。您将无法再使用 VS2010 版本来编译异步代码。

    作为异步行为很重要的示例,请考虑以下重试任务的非常简单的方法。当函数使用 Async CTP 编译时,它 静默失败 (如在应用程序中以静默方式终止)如果发生异常:
    private static async Task<T> Retry<T>(Func<T> func, int retryCount)
    {
    while (true)
    {
    try
    {
    var result = await Task.Run(func);
    return result;
    }
    catch
    {
    if (retryCount == 0)
    throw;
    retryCount--;
    }
    }
    }

    也就是说,我已经使用 Async CTP 一年多了,唯一的问题是添加 Visual Studio 2010 SP1 后的安装顺序。如果顺序错误,Asycn CTP 将无法安装,您必须删除 SP1 并按正确顺序重新安装所有内容。

    尽管如此,我还是会在可行的情况下尽快迁移到 2012 和目标包(即整个团队都准备好切换),以避免多个代码版本和烦人的异常行为。

    关于.net - 使用 Async V3 而不安装它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177002/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com