CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题

news2024/11/17 3:07:58

CS1988|C#无法在异步方法中使用ref,in,out类型的参数

🌀|场景:

请添加图片描述

BlazorServer的场景中推荐使用异步方法,使用ref,out,in为参数前缀则报错CS1988

原因如下:

ref parameters are not supported in async methods because the method may not have completed when control returns to the calling code. Any changes to the referenced variables will not be visible to the calling code, resulting in a CS1988 error.

async 方法不支持 ref 参数,因为当控件返回到调用代码时,该方法可能尚未完成。 对引用变量的任何更改都对调用代码不可见,从而导致 CS1988 错误。

⛵️|替代方法:

将需要用到的参数作为Task的返回,即

请添加图片描述

💥|延申:引用变量的可见性

1.当不使用基础类型为参数,使用引用类型时:

现有Blazor页面如下

@page "/login"

@using KatexTest2.Models
@using KatexTest2.Utils
@inject MyAuthProvider provider


<h3>LoginPage</h3>

<AuthorizeView>
    <NotAuthorized>
        
        @if(Isfailed){
            <span>用户名或密码错误</span>
        }
        
        @if (test.Number==114.514M)
        {
            <span>压力吗室内</span>
        }
        <EditForm id = "LP" Model="loginModel" Context="Login">
            <div>
                <label> Username: 
                    <InputText @bind-Value="loginModel.Username"></InputText>
                </label>
            </div>
            <div>
                <label> Password:
                    <InputText type="password" @bind-Value="loginModel.Password"></InputText>
                </label>
            </div>
            <div>
                <button @onclick="TryLogin">Submit</button>
            </div>
        </EditForm>    
    </NotAuthorized>
    <Authorized>
        <button type="button" class="btn btn-primary" @onclick="TryLogout" ></button>
    </Authorized>    
    <Authorizing>
        <span>翼沿丁真</span>
    </Authorizing>
</AuthorizeView>


@code {

    public class RefTest
    {
        public string Context { get; set; } = "DefaultContext";

        public decimal Number { get; set; } = 11.54M;
    }

    [Parameter]
    public Boolean Isfailed { get; set; } = false;

    public RefTest test { get; set; } = new();

    private LoginFormModel loginModel { get; set; } = new();

    private async Task TryLogin()
    {
        
       Isfailed  =  await provider.LoginAsync(loginModel,test);
        
    }

    private async Task TryLogout()
    {
        await provider.LogoutAsync();
    }
}

修改LoginAsync方法如下:

 public async Task<Boolean> LoginAsync(LoginFormModel loginFormModel,RefTest test)
{
    var (userInDatabase, isSuccess) = LookUpUser(loginFormModel.Username, loginFormModel.Password);
    var principal = new ClaimsPrincipal();

    if (isSuccess)
    {
        var identity = CreateIdentityFromUser(userInDatabase);
        principal = new ClaimsPrincipal(identity);
        await _protectedLocalStorage.SetAsync("identity", JsonConvert.SerializeObject(userInDatabase));
    }
    else
    {
        test.Number = 114.514M;
    }

    NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(principal)));

    await jsRuntime.InvokeVoidAsync("alert", new object[1] { "WTF" });

    return !isSuccess;
}

运行测试:

请添加图片描述

从图中可以看出:

在方法的运行时间内,razor page并不能获取对象信息改变的值(运行完成后可以),如果是一些运行时间长的方法,则可能造成一些响应不及时的效果。例如拿掉权限后依旧可以访问一些东西

🔚|结论:

如果要在async方法中获取一些返回值,请直接加在的Task的返回中。

应避免使用引用类型为参数来充当返回值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/888814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

torch模型转onnx

加载模型 modeltorch.load(saved_model/moudle_best_auc.pth, map_locationcpu) model.eval().cpu()注&#xff1a;由于导出的模型是用于推理的&#xff0c;因此必须指定模型加载的位置和模型验证的位置&#xff0c;这里我使用了cpu做出导出的硬件 分析模型的输入和输出 这里…

基于SSH框架实现的管理系统(包含java源码+数据库)

资料下载链接 介绍 基于SSH框架的管理系统 简洁版 &#xff1b; 实现 登录 、 注册 、 增 、 删 、 改 、 查 &#xff1b; 可继续完善增加前端、校验、其他功能等&#xff1b; 可作为 SSH&#xff08;Structs Spring Hibernate&#xff09;项目 开发练习基础模型&#xf…

维护平衡的艺术:如何与干系人建立和谐关系以确保项目成功

在项目管理领域中&#xff0c;干系人的作用是无法忽视的。他们的支持和参与往往是项目成功的关键。与干系人建立和维护良好的关系成为每一位项目经理必备的技能。接下来&#xff0c;我们将深入探讨如何有效地与干系人互动&#xff0c;从而为项目的成功奠定坚实基础。 干系人的…

中国“诺贝尔奖”未来科学大奖公布2023年获奖名单

未来科学大奖委员会于8月16日公布2023年获奖名单。柴继杰、周俭民因发现抗病小体并阐明其结构和在抗植物病虫害中的功能做出的开创性工作获得“生命科学奖”&#xff0c;赵忠贤、陈仙辉因对高温超导材料的突破性发现和对转变温度的系统性提升所做出的开创性贡献获得“物质科学奖…

2023骨传导耳机推荐,适合运动骨传导耳机推荐

相信很多人跟我一样&#xff0c;随着现在五花八门的耳机品种增多&#xff0c;选耳机的时候真是眼花缭乱&#xff0c;尤其还是网购&#xff0c;只能看&#xff0c;不能试&#xff0c;所以选择起来比较困难&#xff0c; 作为一个运动达人&#xff0c;为了让大家在购买耳机时少走弯…

YOLO系列解读DAY1—YOLOV1预训练模型

一、说在前面 小伙伴们好&#xff0c;博主很久没有写博客了&#xff0c;略感生疏&#xff0c;不到之处敬请谅解&#xff0c;欢迎指出文中错误&#xff0c;大家一起探讨。欲看视频讲解&#xff0c;可转至博主DouYin、B站&#xff0c;欢迎关注&#xff0c;链接如下&#xff1a; …

Cat(1):Cat入门

1 什么是调用链监控 1.1 架构的演进历史 单体应用 架构说明&#xff1a; 全部功能集中在一个项目内&#xff08;All in one&#xff09;。 在单体应用的年代&#xff0c;分析线上问题主要靠日志以及系统级别的指标。 微服务架构 架构说明&#xff1a; 将系统服务层完全独立…

亚马逊添加心愿单对卖家有什么好处

在亚马逊平台上&#xff0c;卖家可以从消费者的角度来看待心愿单的好处。消费者可以将自己感兴趣的商品添加到心愿单中&#xff0c;这对卖家来说也是有一些潜在好处的&#xff1a; 1、潜在销售机会增加&#xff1a;当消费者将商品添加到心愿单中&#xff0c;这可能表示他们对这…

mySQL 视图 VIEW

简化版的创建视图 create view 视图名 as select col ...coln from 表create view 视图名&#xff08;依次别名&#xff09; as select col ...coln from 表create view 视图名 as select col “别名1”&#xff0c;。。。col "别名n" from 表show tab…

Angular安全专辑之二——‘unsafe-eval’不是以下内容安全策略中允许的脚本源

一&#xff1a;错误出现 这个错误的意思是&#xff0c;拒绝将字符串评估为 JavaScript&#xff0c;因为‘unsafe-eval’不是以下内容安全策略中允许的脚本源。 二&#xff1a;错误场景 testEval() {const data eval("var sum2 new Function(a, b, return a b); sum2(em…

挖掘优质短视频超百万条,火山引擎DataLeap助力电商平台生态治理

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在人们的日常生活中&#xff0c;网购已经成为人们生活中不可或缺的购物形式。 根据《中国社交电商行业发展白皮书&#xff08;2022&#xff09;》的数据显示&#x…

古战策与现代项目: 孙子兵法在项目管理中的应用

项目管理在当今的商业环境中是至关重要的。从初创公司到世界500强&#xff0c;项目管理的策略和工具都在不断地演变。然而&#xff0c;我们是否可以从古老的战争策略中汲取智慧&#xff0c;并将它们应用于现代的项目管理实践中呢? 让我们通过孙子兵法&#xff0c;一个古老而又…

ui设计师工作总结及计划范文模板

ui设计师工作总结及计划范文模板【篇一】 白驹过隙&#xff0c;转眼间某某年已近结尾&#xff0c;时间伴随着我们的脚步急驰而去&#xff0c;到了个人工作总结的时候&#xff0c;蓦然回首&#xff0c;才发现过去的一年不还能画上圆满的句号&#xff0c;内心感慨万千&#xff0c…

【PySide】Pyside QtWebEngine网页浏览器打开Flash网页

说明 QWebEngineView 加载 flash插件,可成功显示Flash,如图 源代码 # -*- coding: utf-8 -*- """ @File : pyside_2.py @Time : 2023/8/17 0:11 @Author : KmBase @Version : 1.0 @Contact : @Desc : None """import…

AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 摘要模型架构Embedding层Transformer Encoder层MLP Head 整体流程 摘要 虽然Transformer体系结构已经成为自然语言处理任务的事实上的标准&#xff0c;但它在计算机视觉方面的应用仍然有限。在视…

传统算法是如何在销补调计划中发挥作用的

本文分享了一个「传统机器学习算法」在实际业务中的使用场景。 前言 如果嫌麻烦&#xff0c;你可以直接跳到正题观看~ 最近无论是在工作中的交谈&#xff0c;还是在日常刷屏的新闻&#xff0c;铺天盖地的都是大模型。我横竖是看不明白&#xff0c;费了大劲终于从字缝里看到了两…

后端项目打包上传服务器记录

后端项目打包上传服务器记录 文章目录 后端项目打包上传服务器记录1、项目打包2、jar包上传服务器 本文记录打包一个后端项目&#xff0c;上传公司服务器的过程。 1、项目打包 通过IDEA的插件进行打包&#xff1a; 打成一个jar包&#xff0c;jar包的位置在控制台可以看到。 2、…

记录--JS 的垃圾回收机制

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 垃圾回收(Garbage Collection)是一种内存管理机制&#xff0c;用于检测和清理不再被程序使用的内存&#xff0c;这些不再被使用的内存就被称为垃圾。垃圾回收器会在 JS 引擎(浏览器或者 nodejs)内…

Baklib是比语雀、Notion、石墨文档更好用的在线知识库管理工具

在当今信息爆炸的时代&#xff0c;如何高效地管理和利用知识成为了每个人都面临的问题。在线知识库管理工具应运而生&#xff0c;帮助用户整理、存储和共享知识。在这篇文章中&#xff0c;我将介绍一个更好用的在线知识库管理工具——Baklib&#xff0c;并探讨它相对于其他知识…

Python爬虫——scrapy_多条管道下载

定义管道类&#xff08;在pipelines.py里定义&#xff09; import urllib.requestclass DangDangDownloadPipelines:def process_item(self, item, spider):url http: item.get(src)filename ../books_img/ item.get(name) .jpgurllib.request.urlretrieve(url, filename…