Вы вызываете асин c методы в вашем SOAP API. Метод asyn c ведет себя иначе, чем синхронные методы, что означает, что методы asyn c по умолчанию не будут ожидать результата, пока он не перейдет к следующей строке.
Ниже у вас есть два метода обработки asyn c методов.
Первый метод:
Это самый простой способ заставить ваш асин c метод вести себя как синхронный. Поскольку «await» удостоверится, что вы получите результат, прежде чем перейти к следующей строке.
Второй метод:
Если для вызова каждого метода требуется некоторое время, Вы можете запустить их параллельно. Это означает, что если каждый метод занимает 7 секунд, вам не нужно ждать 21 секунду, пока все они не завершатся.
Вместо этого вы можете начинать вызовы одновременно и ждать всего 7 секунд.
// First Method
var method1 = await client.contentReportAsync();
var method2 = await client.deleteSoapFlagsAsync();
var method3 = await client.getSoapFlagsAsync();
// Second Method
var method1 = client.contentReportAsync();
var method2 = client.deleteSoapFlagsAsync();
var method3 = client.getSoapFlagsAsync();
Task[] tasks = { method1, method2, method3 };
await Task.WhenAll(tasks);
// To access the result in this way, use ".Result"
var result = method1.Result;
Ваш пример полного кода может выглядеть примерно так (обратите внимание на асин c в объявлении метода):
namespace Demo1._0
{
class Program
{
static void Main(string[] args)
{
try
{
await makeSoapCall();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public async static void makeSoapCall()
{
EnventoryWebserviceClient client = new EnventoryWebserviceClient();
client.ClientCredentials.UserName.UserName = "some@thing.com";
client.ClientCredentials.UserName.Password = "somePass!";
var method1 = await client.contentReportAsync();
var method2 = await client.deleteSoapFlagsAsync();
var method3 = await client.getSoapFlagsAsync();
}
}
}