为了账号安全,请及时绑定邮箱和手机立即绑定

如何编写带有out参数的异步方法?

如何编写带有out参数的异步方法?

C#
慕容708150 2019-12-26 11:07:26
我想编写一个带有out参数的异步方法,如下所示:public async void Method1(){    int op;    int result = await GetDataTaskAsync(out op);}我该怎么做GetDataTaskAsync?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

方法中不能包含ref或out参数async(如前所述)。


这为周围的数据建模带来了尖叫:


public class Data

{

    public int Op {get; set;}

    public int Result {get; set;}

}


public async void Method1()

{

    Data data = await GetDataTaskAsync();

    // use data.Op and data.Result from here on

}


public async Task<Data> GetDataTaskAsync()

{

    var returnValue = new Data();

    // Fill up returnValue

    return returnValue;

}

您可以更轻松地重用代码,并且比变量或元组更具可读性。


查看完整回答
反对 回复 2019-12-26
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

Alex强调可读性。同样,一个函数的接口也足以定义要返回的类型,并且您还将获得有意义的变量名。


delegate void OpDelegate(int op);

Task<bool> GetDataTaskAsync(OpDelegate callback)

{

    bool canGetData = true;

    if (canGetData) callback(5);

    return Task.FromResult(canGetData);

}

调用者提供一个lambda(或命名函数),并且intellisense通过从委托中复制变量名称来提供帮助。


int myOp;

bool result = await GetDataTaskAsync(op => myOp = op);

此特定方法类似于“尝试”方法,myOp如果方法结果为,则在其中设置true。否则,您将不在乎myOp。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 537 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信