2011-12-07 8 views
1

비동기 CTP를 사용하여 다음 WCF 서비스 작업을 작성하면 어떤 점이 유리합니까?WCF 비동기 작업 + IO 작업

Task.Factory.StartNew는 longRunningIoperation 기간 동안 스레드 풀 스레드를 차단합니다.

입출력 완료 스레드의 이점을 활용할 수 있도록이 글을 쓰는 더 좋은 방법이 있습니까?

답변

1

longRunningIOOperation도 비동기 작업으로 설정해야합니다. 코드에서 어떤 연산이든 스레드를 차단하는 한, 스레드 풀이든 또는 조작이 호출 된 스레드이든, 일부 스레드는 차단됩니다. 비동기 작업 인 경우 아래 코드와 비슷한 것을 작성할 수 있습니다.

public Task<string> SampleMethodAsync(string msg) 
{ 
    var tcs = new TaskCompletionSource<string>(); 
    longRunningIOOperationAsync().ContinueWith(task => 
    { 
     tcs.SetResult(task.Result); 
    }); 
    return tcs.Task; 
} 
+0

답장을 보내 주셔서 감사합니다. –

0

마침내 나는 어떻게 작동하는지 알아 냈습니다. 나는 .net FX4.5를 설치했고 모든 것이 매력처럼 작동했습니다.

내 시나리오에서 서비스 A는 이와 같이 서비스 B를 호출합니다.

public class ServiceA : IServiceA 
{ 
    public async Task<string> GetGreeting(string name) 
    { 
     ServiceBClient client = new ServiceBClient(); 
     return await client.GetGreetingAsync(); 
    } 
} 

client.GetGreetingAsync() 처리하는 데 10 초가 걸립니다. 내 understading 서비스입니다 요청 스레드는 GetGreetingAsync() 호출하여 차단되지 않습니다.

WCF에서이 기능을 구현하는 방법을 설명하거나 몇 가지 설명서를 통해 WCF의 관점에서이 모든 기능을 이해할 수 있습니까?