#c# #.net #entity-framework #async-await
Вопрос:
**Привет, мне нужно убедиться, что идентификатор первого метода добавления продукта больше, чем у второго метода добавления изображения(на задней фотографии). Как я могу дождаться выполнения строки, прежде чем перейти к следующей строке?
Я пытался создать асинхронный метод, но я получаю ошибку, потому что метод не может вернуть void с помощью асинхронной какой-либо помощи?**
var product = new Product
{
Name = item.Name,
Description = item.Description,
};
product.AddPhoto(item.PictureUrl, pictureFileName);
product.AddPhoto($"back/{item.SKU}$back.png", pictureFileNameBack);
context.Products.Add(product);
}
await context.SaveChangesAsync();
}
public void AddPhoto(string pictureUrl, string fileName, bool isMain = false)
{
var photo = new Photo
{
FileName = fileName,
PictureUrl = pictureUrl
};
if (_photos.Count == 0) photo.IsMain = true;
_photos.Add(photo);
}
Комментарии:
1. Предоставьте весь необходимый код. Это похоже на половину кода. Что делает метод Addphoto ? каков ваш основной метод, в котором представлен этот код ?
2. Исправьте свои скобки и отступы. Это должно быть первое , что вы сделаете, а не последнее.
3. Используйте Task в качестве возвращаемого типа, это похоже на void в синхронных методах.
4. Я добавил метод, однако, если я сделаю его асинхронным, он скажет, что я не могу ждать пустоты
5. Вы не сможете, если не вызовете SaveChanges между ними.
Ответ №1:
Привет, пожалуйста, найдите приведенный ниже обновленный код, если метод не возвращает никакого значения, то это должна быть задача, в противном случае Задача такого типа.
var product = new Product {
Name = item.Name,
Description = item.Description
};
product.AddPhoto(item.PictureUrl, pictureFileName);
product.AddPhoto($"back/{item.SKU}$back.png", pictureFileNameBack);
context.Products.Add(product);
await context.SaveChangesAsync();
public async Task AddPhoto(string pictureUrl, string fileName, bool isMain = false) {
var photo = new Photo {
FileName = fileName,
PictureUrl = pictureUrl
};
if (_photos.Count == 0) photo.IsMain = true;
_photos.Add(photo);
}
Комментарии:
1. Вы
AddPhoto
асинхронны, какая асинхронная обработка выполняется внутри метода?
Ответ №2:
Вместо:
product.AddPhoto(item.PictureUrl, pictureFileName);
product.AddPhoto($"back/{item.SKU}$back.png", pictureFileNameBack);
context.Products.Add(product);
}
await context.SaveChangesAsync();
}
Попробуй:
product.AddPhoto(item.PictureUrl, pictureFileName);
context.Products.Add(product);
}
await context.SaveChangesAsync();
product.AddPhoto($"back/{item.SKU}$back.png", pictureFileNameBack);
await context.SaveChangesAsync();
}