C# 当我调用一个异步方法时,我应该使用什么返回类型来表示成功?
这是我的。代码还有更多内容,但我只是把这个片段放进去,让问题变得更小C# 当我调用一个异步方法时,我应该使用什么返回类型来表示成功?,c#,C#,这是我的。代码还有更多内容,但我只是把这个片段放进去,让问题变得更小 public async Task GetCards(CancellationTokenSource cts) { try { while (true) { await CheckCardAvailability(cts); } } catch
public async Task GetCards(CancellationTokenSource cts)
{
try
{
while (true)
{
await CheckCardAvailability(cts);
}
}
catch (TaskCanceledException)
{
cts.Dispose();
}
}
private async Task CheckCardAvailability(CancellationTokenSource cts)
{
if (Counts.selectedCardCount == 0)
{
CardCountZeroMessages();
SetMessageView(false);
await Task.Delay(500, cts.Token);
return;
}
if (XYX == 0)
{
// other code
await Task.Delay(500, cts.Token);
return;
}
}
我这里有一个简单的返回,但是我是否应该做不同的返回,因为返回类型是Task?请注意,我添加了退货,因为我有很多这样的if条件,我不想做很多if-else-if>P>正如PANAGIOITSKANAVOS所提到的,您可以考虑将代码更改为:
public async Task GetCards(CancellationTokenSource cts)
{
try
{
while (true)
{
CheckCardAvailability(cts);
await Task.Delay(500, cts.Token); // or something with a timer
}
}
catch (TaskCanceledException)
{
cts.Dispose();
}
}
private /*async Task*/void CheckCardAvailability(CancellationTokenSource cts)
{
if (Counts.selectedCardCount == 0)
{
CardCountZeroMessages();
SetMessageView(false);
// await Task.Delay moved outside
}
if (XYX == 0)
{
// other code
// await Task.Delay moved outside
}
}
任务
异步
负责创建任务
。因为它是一个任务
,而不是一个任务
,所以它不会包含任何结果,或者只是一个任务。如果你取消等待,你会得到一个例外。如果没有,则函数成功。这里的回答应该可以帮助您:@Alan2如果您打算使用异步延迟进行轮询,请从CheckCardAvailability
中拉出任务。延迟
CheckCardAvailability
似乎不执行任何异步工作,因此它不应该是async Task
。System.Threading.Timer是另一种选择