Csharp/C#教程:传递* Awaitable *匿名函数作为参数分享


传递* Awaitable *匿名函数作为参数

代码优先。 这就是我想要做的。 我很接近,但我想我只需要修改我在UpdateButton方法中定义参数的方式。

private async void UpdateButton(Action post) { if (!await post()) ErrorBox.Text = "Error posting message."; } private void PostToTwitter() { UpdateButton(async () => await new TwitterAction().Post("Hello, world!")); } private void PostToFacebook() { UpdateButton(async () => await new FacebookAction().Post("Hello, world!")); } 

不幸的是, !await post()不起作用,因为“Type’void’是不可行的。” 所以问题是,如何在此方法中定义我的参数以支持等待参数?

这是TwitterAction()。Post()的定义方式……

public virtual async Task Post(string messageId){...}

 private async void UpdateButton(Func> post) { if (!await post()) ErrorBox.Text = "Error posting message."; } 

– 编辑 –

 UpdateButton(()=>Post("ss")); private async void UpdateButton(Func> post) { if (!await post()) this.Text = "Error posting message."; } public virtual async Task Post(string messageId) { return await Task.Factory.StartNew(() => true); } 

您需要将其作为Task传递,而不是Action

这提供了“等待”的东西。

鉴于您当前的代码,我相信这会有效:

 private async Task UpdateButtonAsync(Task post) { if (!await post) ErrorBox.Text = "Error posting message."; } // This will work if Post returns Task in the current API... private void PostToTwitter() { UpdateButtonAsync(new TwitterAction().Post("Hello, world!")); } 

如果您不想立即启动Task ,并且需要将其保持为传递lambda,则仍然没有理由让lambda异步。 在这种情况下,您可以使用:

 private async Task UpdateButtonAsync(Func> post) { if (!await post()) ErrorBox.Text = "Error posting message."; } // This will work if Post returns Task in the current API... private void PostToTwitter() { UpdateButtonAsync(() => new TwitterAction().Post("Hello, world!")); } 

这会导致lambda返回Task (没有async / await需要,因为Post已经返回Task ),以及运行lambda的update方法。

就个人而言,我发现第一个选项(上面)更简单,并怀疑它更可能是你想要的。 鉴于您的API已经返回Task ,您可以直接传递它并直接await它。

上述就是C#学习教程:传递* Awaitable *匿名函数作为参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/985154.html

(0)
上一篇 2021年12月21日
下一篇 2021年12月21日

精彩推荐