c# - 传递一个 *Awaitable* 匿名函数作为参数

标签 c# asynchronous lambda parameter-passing

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

private async void UpdateButton(Action<bool> 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()不起作用,因为“类型‘void’不可等待。”所以问题是,如何在此方法中定义我的参数以支持 awaitable 参数?

这里是 TwitterAction().Post() 的定义...

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

最佳答案

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

--编辑--

UpdateButton(()=>Post("ss"));

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

public virtual async Task<bool> Post(string messageId)
{
    return await Task.Factory.StartNew(() => true);
}

关于c# - 传递一个 *Awaitable* 匿名函数作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466049/

相关文章:

python - 为什么这个带打印的 Python 2 lambda 不起作用?

c# - 检查枚举属性中是否为 null

c# - ASP.NET MVC C# Google Drive API 重定向不匹配 URI

c# - 将 ViewBag 作为参数传递

c# - 如何使用 MysqlConnector 调用 mysql 函数?

asynchronous - Web API 2 - 所有 REST 请求都是异步的吗?

javascript - Node.js 中复杂调用的流程/模式

reactjs - 为什么我需要 redux async thunk

java - 如果流包含多个逗号分隔值,则拆分流

lambda - 适用于教会数字的公式