Ошибка в моем консольном приложении «Программа не содержит статический метод« Main », подходящий для точки входа» - PullRequest
0 голосов
/ 01 декабря 2018

Я хочу запустить параллельную обработку внутри моего консольного приложения asp.net.я использую c # 7.1 + Visual Studio 2017

Вот мой код: -

 class Program
    {
        static int concurrentrequests = int.Parse(ConfigurationManager.AppSettings["ConcurrentRequests"]);
        static   SemaphoreSlim throttler = new SemaphoreSlim(initialCount: concurrentrequests);
        static int numberofrequests = int.Parse(ConfigurationManager.AppSettings["numberofrequests"].ToString());
        static  int waitduration = int.Parse(ConfigurationManager.AppSettings["waitdurationmilsc"].ToString());
        private static async Task<ScanInfo> gettingCustomerInfo(string website)
        {
            await throttler.WaitAsync();
            ScanInfo si = new ScanInfo();
            int counter = 1;
            try
            {
                //code goes here..
                Console.WriteLine(website + "    -->     " + si.EmailGateway + "    -->     " + si.Status);

            }
            catch (Exception e)
            {

            }
                try
                {
                    using (WebClient wc = new WebClient()) // call the PM API to get the account id 
                    {
                        //code goes here..

                    }
                }
                catch (Exception e)
                {



                }
                //string pmtoken = tokenGet();

                finally
                {

                    throttler.Release();
                }

            }
            return si;
        }

        static async Task Main(string[] args)
        {
            Marketing ipfd = new Marketing();
            try
            {
                using (WebClient wc = new WebClient()) 
                {
                    //code goes here..

                }
            }
            catch (Exception e)
            {


            }
            var tasks = ipfd.companies.Select(c => gettingCustomerInfo(c.properties.website.value)).ToList();
            var results = await Task.WhenAll(tasks);
    }}

сейчас в моем коде выше, я пытаюсь вызвать gettingcustomerinfo параллельно.но мой приведенный выше код вызовет следующую ошибку: -

«Программа не содержит статический метод« Main », подходящий для точки входа»

теперь, если я использую: -

static void Main(string[] args)

вместо: -

static async Task Main(string[] args)

вместо этого я получу эту ошибку: -

Оператор 'await' может использоваться тольков асинхронном методе.Попробуйте пометить этот метод модификатором «async» и изменить его тип возвращаемого значения на «Task».

on: -

var results = await Task.WhenAll(tasks);

, так что может кто-нибудь посоветовать по этому поводу, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Попробуйте что-то вроде этого:

public class SomeClass
{
    public async void RunTask()
    {
        await SomeTask();
    }

    private Task<int> SomeTask()
    {
        var x = 10;
        System.Threading.Thread.Sleep(1000);
        return Task.FromResult(x);
    }
}

class Program
{
    static void Main(string[] args)
    {
        var someClass = new SomeClass();
        someClass.RunTask();
    }
}
0 голосов
/ 11 декабря 2018

Я делал что-то подобное, чтобы обойти проблему некоторое время.

class Program
{
    static void Main(string[] args)
    {
        try
        {
            AsyncTask().Wait();

        }
        catch (Exception e)
        {
            ...
        }

    }

    static async Task AsyncTask()
    {
        ...
        var httpClient = new HttpClient();     
        var response = await httpClient.PostAsync(queryString, content);
        ...
    }
}
0 голосов
/ 01 декабря 2018

Используете ли вы C # 7.2 в вашем VisualStudio Proj?

Вы должны использовать C # 7.2 или более позднюю версию для построения асинхронной главной.

Попробуйте щелкнуть правой кнопкой мыши ваш проект и нажать кнопку свойства.,А затем вы должны выбрать вкладку сборки и нажать расширенную кнопку, чтобы выбрать C # 7.2.

enter image description here

enter image description here

Другой способ - редактирование файла csproj.Вы можете добавить <LangVersion>latest</LangVersion> в группу свойств.

См. https://blogs.msdn.microsoft.com/benwilli/2017/12/08/async-main-is-available-but-hidden/

Версия на китайском языке: https://lindexi.gitee.io/post/VisualStudio-%E4%BD%BF%E7%94%A8%E4%B8%89%E4%B8%AA%E6%96%B9%E6%B3%95%E5%90%AF%E5%8A%A8%E6%9C%80%E6%96%B0-C-%E5%8A%9F%E8%83%BD.html

Или вы должны выбрать главную загрузку.

enter image description here

...