我有一个INetwork
方法接口:
Task<bool> SendAsync(string messageToSend, CancellationToken ct)
该接口的一种实现具有如下代码:
public async Task<bool> SendAsync(string messageToSend, CancellationToken ct)
{
var udpClient = new UdpClient();
var data = Encoding.UTF8.GetBytes (messageToSend);
var sentBytes = await udpClient.SendAsync(data);
return sentBytes == data.Length;
}
不幸的是,SendAsync()
该类UdpClient
不接受CancellationToken
.
所以我开始将其更改为:
public Task<bool> SendAsync(string messageToSend, CancellationToken ct)
{
var udpClient = new UdpClient();
var data = Encoding.UTF8.GetBytes (messageToSend);
var sendTask = udpClient.SendAsync(data);
sendTask.Wait(ct);
if(sendTask.Status == RanToCompletion)
{
return sendTask.Result == data.Length;
}
}
显然这是行不通的,因为没有Task
返回。但是,如果我返回任务,签名将不再匹配。SendAsync()
返回 a Task<int>
,但我需要 a Task<bool>
。
现在我很困惑。:-) 如何解决这个问题?