구조 끝내 불행하게도 아직 Microsoft는 모두 .NET 4.5 VS 2012, 그리고 그것의 릴리스 후보를 나타내 기다리고 있습니다
C# 5.0 비동기/동기 부여 이 기술들이 우리 프로젝트에 널리 채택 될 때까지 시간이 걸릴 것입니다.은/닷넷에서 구조를 기다리고 4.0
스티븐 투브 (Stephen Toub)의 Asynchronous methods, C# iterators, and Tasks에서 저는 .NET 4.0에서 잘 사용될 수있는 대체물을 발견했습니다. .NET 2.0에서도이 접근법을 사용할 수있게 해주는 12 가지 구현이 있습니다.하지만 구식이 아닌 기능이 풍부하지는 않습니다.
예
그래서 지금 내 .NET 4.0 코드는 같습니다 (주석 섹션이 .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));
}
}
조금 못생긴 보이는
질문
.NET 4.5 CancellationTokenSource을 그를 생성하며,이 타임 아웃 시간 범위를 파라미터로하는 생성자가 존재하여지정된 기간 내에 취소합니다. .Net 4.0에서 시간 제한을 설정할 수 없으므로 .Net 4.0에서 올바른 방법은 무엇입니까?
관련 질문 : http://stackoverflow.com/questions/9110472/using-async-await-on- 내가
CancelAfter()
의 구현을보기 위해 F12 키를 누르면이
은 refereance 소스도 코드 net-4 – CodesInChaos제목이 시간 제한에 관한 것이고 "타이머"(일부 기간 실행과 함께 반복적으로 사용됨)가 오도 된 것으로 생각되어 제목에 "timer"가 "timeout"으로 변경되었습니다. –