我使用以下方法:
public async Task<SaveStatus> Save(Foo foo,out int param)
{
.......
MySqlParameter prmparamID = new MySqlParameter("pParamID", MySqlDbType.Int32);
prmparamID .Direction = ParameterDirection.Output;
sqlCommand.Parameters.Add(prmparamID);
try
{
await sqlConnection.OpenAsync();
await sqlCommand.ExecuteNonQueryAsync();
status = (SaveStatus)Convert.ToInt32(prmReturnValue.Value);
if (status == SaveStatus.Success)
{
if (Common.IsDBValueNotNullOrEmpty(prmParamID))
{
param= Convert.ToInt32(prmParamID.Value);
}
}
}
return status;
}
我想返回状态和整数参数。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:10)
out
方法中不能包含async
参数。以下是有关原因的更多信息:Why async methods cannot have ref or out parameters?
如果要返回多个返回值,则可能应该有一个包含这些值的类并将其返回。
如果您不想创建新课程,可以使用Tuple
:
public async Task<Tuple<SaveStatus, int>> Save(Foo foo)
{
SaveStatus status;
int param;
// ...
return Tuple.Create(status, param);
}
答案 1 :(得分:0)
快速回答是&#34;因为人们会尝试使用它&#34;。
从技术上讲,方法可以包含ref
和out
个参数,但它们的值只能在第一个await
之前设置。因为,在此之后,它不再是调用者调用的方法,而是一些编译器生成的状态机代码运行。