У меня есть консольное приложение asp.net, и внутри этого консольного приложения я хочу параллельно вызывать асинхронный метод, используя WhenAll
, вот основной метод моего консольного приложения:
static void Main(string[] args)
{
Marketing ipfd = new Marketing();
try
{
using (WebClient wc = new WebClient()) // call the PM API to get the account id
{
//code goes here...
}
}
catch (Exception e)
{
}
var tasks = ipfd.companies.Select(c => gettingCustomerInfo(c.properties.website.value)).ToList();
var results = await Task.WhenAll(tasks);}
}
И вот метод, который я вызываю: -
class Program
{
static int concurrentrequests = int.Parse(ConfigurationManager.AppSettings["ConcurrentRequests"]);
SemaphoreSlim throttler = new SemaphoreSlim(initialCount: concurrentrequests);
int numberofrequests = int.Parse(ConfigurationManager.AppSettings["numberofrequests"].ToString());
int waitduration = int.Parse(ConfigurationManager.AppSettings["waitdurationmilsc"].ToString());
private async Task<ScanInfo> gettingCustomerInfo(string website)
{
await throttler.WaitAsync();
ScanInfo si = new ScanInfo();
var tasks = ipfd.companies.Select(c => gettingCustomerInfo(c.properties.website.value)).ToList();
var results = await Task.WhenAll(tasks);
Но я получаю следующие исключения: -
Оператор 'await' может использоваться только внутри асинхронного метода.Попробуйте пометить этот метод модификатором «async» и изменить его тип возвращаемого значения на «Task»
Ссылка на объект требуется для нестатического поля, метода или свойства »***. Program.gettingCustomerInfo (string) '
Так может кто-нибудь посоветовать по этому поводу?Теперь я знаю, что первое исключение касается того, что сам метод Main не является асинхронным, но если я определю метод main как асинхронный, тогда я получу еще одно исключение, что программа не содержит метод Main, который можно вызвать в качестве конечной точки?