yapılar müthiş maalesef henüz Microsoft sadece her iki .NET 4.5 ve VS 2012 ve bunun bir sürüm adayı gösterilir bekliyor verisimi
C# 5.0 zaman uyumsuz/Motivasyon Bu teknolojiler projelerimizde yaygın olarak benimsenene kadar biraz zaman alacaktır./.NET yapıları bekliyor 4.0
Stephen Toub'nin Asynchronous methods, C# iterators, and Tasks numaralı sürümünde .NET 4.0'da güzel bir şekilde kullanılabilen bir değiştirme buldum. Ayrıca, biraz güncelliğini yitirmiş ve daha az özellik bakımından zengin olsa da, .NET 2.0'da bile bu yaklaşımı kullanarak bunu mümkün kılan bir düzine başka uygulama vardır.
Örnek
Yani şimdi benim .NET 4.0 kod benziyor (yorumladı bölümler de .NET 4.5 nasıl yapılır göster): iş yapar gerçi
//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));
}
}
küçük çirkin görünüyor
soru
.NET 4.5 CancellationTokenSource oçıkan böylece, bir zaman aşımı parametre olarak zaman aralığı alan bir kurucu yoktur kullanılarakbelirli bir süre içinde iptal eder.
.Net 4.0, zaman aşımı yapamıyor, bu yüzden .Net 4.0'da bunu yapmanın doğru yolu nedir?
İlgili soru: http://stackoverflow.com/questions/9110472/using-async-await-on- Ben
CancelAfter()
uygulanmasını görmek için F12 tuşuna bastığınızdaBu
refereance sos kodu olduğunu net-4 – CodesInChaosSorunun zaman aşımı ve "zamanlayıcı" (zaman aşımıyla bazı dönem yürütmeleri için yinelenen için kullanılan) hakkında "zaman aşımı" için başlıkta "zaman aşımı" olarak değiştirildi. Yanıltıcı ve şaşırtmalı –