Я пытаюсь написать функцию, которая использует 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? Почему бы вам не удалить метод * whole * 'Login' и просто вызвать' var response = wait client.loginAsync (request); '? –