Động lực
C# 5.0 async/chờ đợi các cấu trúc được tuyệt vời, không may nhưng Microsoft chỉ được hiển thị một ứng cử viên phát hành của cả hai .NET 4.5 và VS 2012, và nó sẽ mất một thời gian cho đến khi các công nghệ này sẽ được áp dụng rộng rãi trong các dự án của chúng tôi.Thực hiện thời gian chờ async sử dụng mans async nghèo/chờ đợi các cấu trúc trong Net 4.0
Trong Stephen Toub Asynchronous methods, C# iterators, and Tasks Tôi đã tìm thấy một thay thế có thể được sử dụng độc đáo trong .NET 4.0. Ngoài ra còn có một tá các triển khai khác làm cho nó có thể sử dụng cách tiếp cận ngay cả trong .NET 2.0 mặc dù họ có vẻ ít lỗi thời và ít tính năng phong phú hơn.
Ví dụ
Vì vậy bây giờ tôi mã NET 4.0 trông giống như (các phần nhận xét thấy làm thế nào nó được thực hiện trong .NET 4.5):
//private async Task ProcessMessageAsync()
private IEnumerable<Task> ProcessMessageAsync()
{
//var udpReceiveResult = await udpClient.ReceiveAsync();
var task = Task<UdpAsyncReceiveResult>
.Factory
.FromAsync(udpClient.BeginReceive, udpClient.EndReceive, null);
yield return task;
var udpReceiveResult = task.Result;
//... blah blah blah
if (message is BootstrapRequest)
{
var typedMessage = ((BootstrapRequest)(message));
// !!! .NET 4.0 has no overload for CancellationTokenSource that
// !!! takes timeout parameter :(
var cts
= new CancellationTokenSource(BootstrapResponseTimeout); // Error here
//... blah blah blah
// Say(messageIPEndPoint, responseMessage, cts.Token);
Task.Factory.Iterate(Say(messageIPEndPoint, responseMessage, cts.Token));
}
}
Trông chút xấu xí mặc dù nó không được công việc
Câu hỏi
Khi sử dụng CancellationTokenSource trong .NET 4.5, có một hàm tạo tham số timepan để kết quả là CancellationTokenSource
hủy trong khoảng thời gian được chỉ định.
.Net 4.0 không thể hết thời gian chờ, vì vậy cách thực hiện chính xác điều đó trong .Net 4.0 là gì?
câu hỏi liên quan: http://stackoverflow.com/questions/9110472/using-async-await-on- net-4 – CodesInChaos
Thay đổi "hẹn giờ" thành "hết giờ" trong tiêu đề vì câu hỏi là về thời gian chờ và "hẹn giờ" (được sử dụng để định kỳ với một số lần thực thi) bị gây hiểu lầm và mất phương hướng –