Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匿名方法-3种不同的方法-异步_C#_Asp.net Core_Methods_Anonymous Function_Blazor - Fatal编程技术网

C# 匿名方法-3种不同的方法-异步

C# 匿名方法-3种不同的方法-异步,c#,asp.net-core,methods,anonymous-function,blazor,C#,Asp.net Core,Methods,Anonymous Function,Blazor,我不确定该在标题中写什么,它们可能不都是匿名方法,但下面是: 假设我们有这个异步函数: public async Task Delete(){ //something } 我正在使用Blazor服务器端,我很好奇下面四种调用函数的方法。假设它们在div标签中 onclick=“@Delete” onclick=“@(()=>Delete(id))” onclick=“@(异步()=>等待删除(id))” onclick=“@(e=>Delete(person.Id)) 我不确定1对Bl

我不确定该在标题中写什么,它们可能不都是匿名方法,但下面是:

假设我们有这个异步函数:

public async Task Delete(){  
  //something
}
我正在使用Blazor服务器端,我很好奇下面四种调用函数的方法。假设它们在div标签中

  • onclick=“@Delete”

  • onclick=“@(()=>Delete(id))”

  • onclick=“@(异步()=>等待删除(id))”

  • onclick=“@(e=>Delete(person.Id))

  • 我不确定1对Blazor是否是新的,但它是否理解该方法是异步的


    如果需要传入参数,可以使用2和3,但我以前从未使用过异步部分,只在以前的文章中看到过。是否还需要说
    “async()=>“

    在Blazor的早期版本中,您需要使用选项3,因为不支持
    异步
    功能。如果您错过了
    wait
    ,Blazor无法知道该方法已完成,因此您需要手动调用
    statehaschange
    ,以便在需要时重新呈现组件

    但是,现在Blazor确实支持异步方法,因此您可以坚持使用选项1,但需要注意的是,您需要该方法返回
    Task
    ,而不是
    void

    所以你需要这样的东西:

    public async Task Delete(){  
      //something
    }
    
    在布拉佐:

    onclick="@Delete"
    

    到3:使用
    wait
    调用某个对象时,假定您的方法是
    async
    。所以是的,当你使用另一个的时候,你需要一个。好的接球。使psudo代码有点太快了谢谢。(哦,注释不喜欢换行符)当需要发送参数时,您建议使用2/3还是4版本?关于4,是否需要在“e”之前加上“async”或在“Delete”或“wait”之前加上“await”?感觉我在这里混淆了不同的概念。如果你有时间的话,我想听听/确认一下1、2/3和4的概念/背景是什么。我对它的理解是:1:??2:非异步匿名方法3:异步匿名方法4:lambda表达式-更好/更糟/为什么?对于参数,只需像传递任何方法
    @Delete(value1,value2)
    一样传递它们,实际上对我不起作用。我有这样一个:@{string textParam=“Texty”}单击方法如下:“private async Task ChangeLang(string incParam)”我得到了编译器错误:“参数2:无法从'System.Threading.Tasks.Task'转换为'Microsoft.AspNetCore.Components.EventCallback'”。请查看和
    EventCallback
    委托。对不起,我现在不在Blazor兼容的IDE附近check@Track,我在参数方面也遇到了这个问题。在这种情况下,选项2和3(异步)似乎是可行的。希望你背上没有皮肤脱落。