Путаница относительно асинхронного выполнения в ASP.NET CoreC#

Место общения программистов C#
Anonymous
Путаница относительно асинхронного выполнения в ASP.NET Core

Сообщение Anonymous »

Несмотря на то, что я использую async, оператор печати:

Код: Выделить всё

I should be on top
выводится на консоль последним. Почему метод async не позволяет сначала распечатать его?
Журнал консоли:

Код: Выделить всё

I am inside aync method
info: 22/10/2024 09:17:14.591 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)
Executed DbCommand (19ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT [b].[Id], [b].[Author], [b].[BookId], [b].[BookName], [b].[ISBN], [b].[Price], [b].[Publisher_Id], [b].[check]
FROM [Books] AS [b]
WHERE [b].[Price] < 1000.0
I should be on top
Код:

Код: Выделить всё

updateBook();

async void updateBook()
{
// first we retrieve rows from db and EF itself keeps track of its value
using var context = new AppDbContext();

// var book = context.Books.FirstOrDefault();

// EF is smart enough to notice that we changed value of book we retrives
// book.Author = "Ayush";

// finally EF will update author to ayush for row we retrieved
// context.SaveChanges();

// updating multiple record we retrieved using foreach loops

var books = context.Books.Where(e => e.Price < 1000);

foreach(var item in books)
{
item.Price = 1000;
}

Console.WriteLine("I am inside async method");
await context.SaveChangesAsync();
}

deleteBook();

async void deleteBook()
{
using var context = new AppDbContext();

// we use remove method to delete but we first get the book obj we want to delete

var toRemoveBook = await context.Books.FindAsync(7);

if (toRemoveBook != null)
{
context.Books.Remove(toRemoveBook);
await context.SaveChangesAsync();
}
}

Console.WriteLine("I should be on top");
Я ожидал

Код: Выделить всё

I should be on top
чтобы сначала распечатать; Я думал, что вызов асинхронного метода не блокируется и работает синхронно только внутри блока метода, но не в основном потоке.

Подробнее здесь: https://stackoverflow.com/questions/791 ... p-net-core

Вернуться в «C#»