我的课程正在包装TcpListener
,并且我正在尝试对其进行更新以使用现代的async
语言。
这引发了一个问题,如果方法应提早退出该怎么办。如果这是旧代码:
public void Connect()
{
if (tcp != null)
tcp.Connect(config.IPAddress, config.Port);
}
然后我从这样的东西开始:
public Task ConnectAsync()
{
if (tcp != null)
{ ???? }
return tcp.ConnectAsync(config.IPAddress, config.Port);
}
但是在tcp==null
条件下,我应该返回什么?是否有一些“可以等待的空值”?
我也不确定在包装另一种方法的情况下我的方法是否应指定为async
-我确定我[[not想要await
被调用的方法。这可以编译,但我认为这是不对的:
public async Task ConnectAsync()
{
if (tcp != null)
return;
await tcp.ConnectAsync(config.IPAddress, config.Port);
}
public Task ConnectAsync()
{
if (tcp == null)
{
return Task.CompletedTask;
}
return tcp.ConnectAsync(config.IPAddress, config.Port);
}
Task.CompletedTask
也是单例实例,因此,如果定期调用此方法,则不会产生额外的开销。您也可以将您的方法编写为
async
,什么也不返回:
public async Task ConnectAsync() { if (tcp != null) { await tcp.ConnectAsync(config.IPAddress, config.Port); } }