필자는 작업자 또는 대기열 (아마도 새로운 ConcurrentQueue)에 위임을 삽입하는 메서드를 원하는 일부 액터 모델 유형의 메시지 처리 시나리오를 사용하고 있습니다. 대기열을 처리하고, 작업을 실행 한 다음 결과를 반환하는 다른 프로세스 (가능하면 잠금없이). 이 메소드는 동 기적으로 또는 비동기 적으로 호출 될 수 있습니다. 하나의 행동은 내가 다소 성능이 좋은 방법으로이 작업을 수행하는 방법에 주위에 내 머리를 정리 할 수 대기열을 사용하는 비동기식/동기식 동시 호출
는, 사람이 시도 보는 것 :
편집 여기
에게 도움을 주시기 바랍니다
동시에 실행할 수있는 대기 이 접근법에 대한 문제 (예외 처리 제외)? 또한, 단순히 잠금에 비해 많은 오버 헤드가 발생하고 비동기 대리자를 사용하는 경우와 어떻게 비교할 수 있을까요?public partial class Form1 : Form
{
private BlockingCollection<Task<int>> blockingCollection = new BlockingCollection<Task<int>>(new ConcurrentQueue<Task<int>>());
private int i = 0;
public Form1() {
InitializeComponent();
Task.Factory.StartNew(() =>
{
foreach (var task in blockingCollection.GetConsumingEnumerable()) {
task.Start();
task.Wait();
}
});
}
public int Queue() {
var task = new Task<int>(new Func<int>(DoSomething));
this.blockingCollection.Add(task);
task.Wait();
return task.Result;
}
public int DoSomething() {
return Interlocked.Increment(ref this.i);
}
private void button1_Click(object sender, EventArgs e) {
Task.Factory.StartNew(() => Console.Write(this.Queue()));
}
}
프레임 워크의 TPL Task 병렬 라이브러리와 요구 사항 간의 차이점은 무엇입니까? 대기열은 프레임 워크만으로 처리되며 요구 사항에 따라 다른 동기화 대안이 있습니다. – weismat
SmartThreadPool 라이브러리 (http://smartthreadpool.codeplex.com/)를보고 싶을 수도 있습니다. – Larry