Как заставить мое приложение работать или ждать, пока моя «задача» завершится? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть код ниже c#, ответственность за который заключается в получении сведений из database и выполнении некоторых действий.

   static void Main(string[] args)
    {
        try
        {
            ProcessTask().Wait();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"There was an exception: {ex.ToString()}");
        }
    }

Вот задача

    static private async Task ProcessTask()
    {
        //Connect to database
        //fetch data 
        //update data based on condition
    }

Но мойПрограмма выходит перед завершением задачи!

Один из методов внутри ProcessTask ожидает события «Подключено», следовательно, Задача предполагает, что оно завершено.

Конечная цель : Я хочу запустить этот код в планировщике Windows.так что каждый час я могу проверять базу данных и делать обновления.поэтому я не могу использовать "console.readline ()"

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

Я полагаю, вы это делаете в консольном приложении.Поэтому я бы предложил сделать два изменения.

static void Main(string[] args)
{
    try
    {
        ProcessTask()
           .GetAwaiter()
           .GetResult(); // This will give you a better exception details compared to Task.Wait().
    }
    catch (Exception ex)
    {
        Console.WriteLine($"There was an exception: {ex.ToString()}");
#if DEBUG
        Console.ReadLine(); // Generic error handler. Stop exiting. So you can read the exception. 
#endif
    }
}
0 голосов
/ 24 сентября 2019

Делай как ниже

static void Main(string[] args)
    {
        callMethod();
        Console.ReadKey();
    }

    public static async void callMethod()
    {
        Task<int> task = Method1();
        int count = await task;
        Method2(count);
    }
    // Do your db call here
    public static async Task<int> Method1()
    {
        int count = 0;
        await Task.Run(() =>
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine(" Method 1");
                count += 1;
            }
        });
        return count;
    }


    public static void Method2(int count)
    {
        Console.WriteLine("Total count is " + count);
    }
0 голосов
/ 24 сентября 2019

Попробуйте это

static async Task Main(string[] args)
    {
        try
        {
            await ProcessTask();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"There was an exception: {ex.ToString()}");
        }
    }
...