Как я могу убедиться, что второй метод addPhoto продукта вызывается после завершения первой строки addphoto?

#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();

        }