Task 및 TaskCompletion을 사용하는 함수를 작성하려고합니다.작업이 결과를 반환하지 않습니다.
내 문제는 로그인 후 결과가 반환되지 않습니다. 전에 비슷한 코드를 사용했는데 작동하고있었습니다. 나는이 상황에 어떤 원인이 있는지 모른다.
public async Task<byte[]> Sign(byte[] documentContent)
{
var service = new SignServiceWrapper("https://example.com?wsdl");
var loginResult = await Task.Run(() => service.Login(loginRequest));
//....
}
내 SignServiceWrapper 클래스
나는 그것이 작동처럼 내 로그인 기능을 호출하는 경우
public class SignServiceWrapper
{
private static string _webServiceUrl;
private BrokerClientClient client;
public SignServiceWrapper(string webServiceUrl)
{
_webServiceUrl = webServiceUrl;
}
public Task<loginResponse> Login(loginRequest request)
{
var tcs = new TaskCompletionSource<loginResponse>();
ClientGenerator.WebServiceUrl = _webServiceUrl;
ClientGenerator.InitializeService();
client = ClientGenerator.ServiceClient;
client.loginCompleted += (sender, loginResult) =>
{
if (loginResult.Error != null)
tcs.SetException(loginResult.Error);
else
tcs.TrySetResult(loginResult.Result);
};
client.loginAsync(request);
return tcs.Task;
}
// ...
}
var loginResult = Task.Run(() => service.Login(loginRequest));
loginResult.Wait();
내가 교착 상태의 종류가 있다는 것을 알고 있지만 나도 몰라 어떻게 이것을 해결할 것인가?
작업 완료까지 얼마나 걸리셨습니까? 처리 중인지 확인하기 위해 작업을 단계별로 시도 했습니까? – Takarii
loginCompleted 이벤트에 중단 점을 넣었으므로 결과가 나타나지만 문제가 발생하지 않습니다. – ertan2002
'await'이 손상되지 않았습니다. 당신의 코드는 다소 특이한 - Task.Run *과 * TCS *와 * 웹 서비스 호출은 이미'loginAsync' 메소드를 가지고 있는가? * 전체 *'Login' 메소드를 제거하고'var response = await client.loginAsync (request); '를 호출하면 어떨까요? –