异步流在 xamarin (C# 7.3) 中不可用

Posted

技术标签:

【中文标题】异步流在 xamarin (C# 7.3) 中不可用【英文标题】:async streams not available in xamarin (C# 7.3) 【发布时间】:2022-01-08 11:33:29 【问题描述】:

我正在尝试将元数据从我的 Xamarin 应用程序添加到我的 Azure blob(图片)。我第一次在 C# 控制台应用程序中尝试了这个并且它有效,但是当我尝试将代码放入我的 Xamarin 应用程序(作为一个新的单独类)时,我收到了以下错误。

CS8370 功能“异步流”在 C# 7.3 中不可用。请使用 8.0 或更高版本的语言。

错误指向第一个 await (await foreach (BlobItem ...)。我使用的是 netstandard 2.0(在我的 .csproj 文件中它说 netstandard2.0

我想知道是否可以更改我的代码/更改任何设置以使其正常工作?

这是我的代码:

static async Task AddType()
    
        string connectionString = "xxx";

        // Create a BlobServiceClient object which will be used to create a container client
        BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

        // Get the container client object
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("raspberryuploads");

        // List all blobs in the container
        await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
        
            BlobClient blobClient = new BlobClient("xxx", "yyy", blobItem.Name);
            IDictionary<string, string> metadata = new Dictionary<string, string>();

            // Add metadata to the dictionary by using key/value syntax
            metadata["Type"] = "Result";

            // Set the blob's metadata.
            await blobClient.SetMetadataAsync(metadata);
        
    

此代码主要由微软文档编写。

链接:BlobsMetadata

【问题讨论】:

您可以尝试针对 .NET 标准 2.1 或在项目文件中设置语言版本:docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 【参考方案1】:

错误消息表示您尝试使用不属于您当前使用的版本的 C# 功能。您正在使用 .NET Standard 2.0 附带的 C# 7.3。但是您需要 .NET Standard 2.1 附带的 C# 8。你可以在这里https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version 和https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8 阅读更多相关信息。 尝试将您的 .NET Standard 版本升级到 2.1,它应该可以运行。

【讨论】:

另请注意,这可能很简单,只需打开项目属性并更改语言版本即可。它是项目中的一个属性。这允许人们限制可用的功能 - 在 OP 的情况下,这些功能会回来并咬他。 @Sebastian S. 所以我应该在 .csproj 文件 -> 属性组 -> TargetFramework 中将 netstandard2.0 更改为 netstandard2.1? @TomTom 当我转到属性 -> 构建 -> 高级 -> 语言版本我不能选择 C# 8.0,它说根据框架版本自动选择 是的,我会试一试。我很确定您可以像升级到 netstandard2.1 后提到的 @TomTom 一样选择 C#8.0 @SebastianS。谢谢,错误现在消失了,尽管我仍然无法更改我的语言版本。最后一个问题,我知道这是安全的,以后不会导致更多错误吗?

以上是关于异步流在 xamarin (C# 7.3) 中不可用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin C# - 从其他类调用异步方法

在 Xamarin C# 中选择对 Sqlitie DB 的异步原始查询的问题

Xamarin.Forms之异步

Xamarin 中的 NUnit 异步测试不起作用

哪个 C# 编译器版本可以使用 CSharpCodeProvider 类编译 C# 7.3?

如何从异步函数 C# 返回字符串而不是 SYSTEM.THREADING.TASK.TASK`1[SYSTEM.STRING]