의 난이 간단한 조각이 있다고 가정하자async/await을 직렬화하는 방법은 무엇입니까?
는async void button_Click(object sender, RoutedEventArgs e)
{
await Task.Factory.StartNew(() =>
{
Console.WriteLine("start");
Thread.Sleep(5000);
Console.WriteLine("end");
});
}
은 물론, 매번 나는 이전 작업이 여전히 실행하면 새 작업도 시작 버튼 있음을 누릅니다. 이전 작업이 모두 끝날 때까지 새로운 작업을 연기하려면 어떻게합니까?
좀 더 자세한 사항 : 위의 예에서
은, 각각의 새로운 작업은 이전 작업과 동일합니다. 그러나 원래 컨텍스트에서는 작업 순서가 중요합니다. 매개 변수가 변경 될 수 있습니다 (DateTime.Now.Ticks
을 사용하여 "시뮬레이션"할 수 있음). 작업은 "등록"된 순서대로 실행해야합니다. 구체적으로 말하자면, 내 프로그램은 시리얼 장치와 통신 할 것이다. 전에 BlockingCollection
을 사용하는 백그라운드 스레드로이 작업을 수행했습니다. 그러나 이번에는 엄격한 요청/응답 프로토콜이 있으며 가능한 경우 async/await를 사용하고 싶습니다.
가능한 해결 방법 : 나는 작업을 생성하고 목록에 저장 상상할 수
. 그러나 요구 사항과 관련된 작업을 어떻게 수행 할 수 있습니까? 또는 이전에 사용한 스레드 기반 솔루션으로 돌아 가야합니까?
여전히 'ConcurrentQueue' 또는'BlockingCollection'을 사용할 수 있습니다. 생산자 - 소비자 시나리오이므로 후자가 가장 적합해야합니다. –
예. 그러나 내가보기에, 나는 대기열에서 기다리고 그것을 반복 할 필요가있다. 작업을 생성하기 위해'작업'또는 데이터를 저장하겠습니까? 'Task' 내부에서 큐를 루프 시키거나 루프가'Task'를 시작할 것인가?그럼에도 불구하고, 이것은별로 문제가되지 않지만, 나는 그 요청/응답 패턴에 더 적합한 또 다른 방법이 있기를 희망했다. – JeffRSon