Безопасно ли вызывать BeginSaveChanges (null, null) для выполнения вызовов DataContext Fire и Forget Async? - PullRequest
1 голос
/ 27 августа 2010

Я заметил, что при выполнении многих транзакций базы данных с использованием BeginSaveChanges (null, null) последний запрос иногда бывает неудачным. Это потому, что экземпляр моего DataContext умер слишком быстро для выполнения запроса?

Когда я изменил свой код на использование обычных SaveChanges, все запросы были успешными.

В частности, я выполняю запросы к хранилищу таблиц Azure, используя TableServiceContext.

Редактировать - Если избавление от моего DataContex является реальной проблемой. Какие у меня есть альтернативы? Должен ли я создать экземпляр моего текста данных и выполнить свой запрос в задании?

Ответы [ 3 ]

2 голосов
/ 27 августа 2010

Прежде всего, вы всегда должны вызывать соответствующий метод EndXXX для любого метода BeginXXX.

Затем вы должны убедиться, что не утилизируете объект, который вызываете метод BeginXXX, прежде чем вызывать метод EndXXX.


Подход "сохранить и забыть" (игнорируя проблему утилизации) заключается в передаче EndXXX в качестве обратного вызова BeginXXX:

obj.BeginXXX(callback: obj.EndXXX, state: null);
// -- or --
obj.BeginXXX(callback: asyncResult => obj.EndXXX(asyncResult), state: null);

Вам все еще нужно убедиться, что вы не вызываете obj.Dispose(); до завершения всех асинхронных операций.

1 голос
/ 27 августа 2010

Во-первых, если вы не позвоните в EndXXX, вы никогда не получите исключение, если что-то пойдет не так.Вы можете сначала проверить это, чтобы увидеть, не было ли исключение в вашей последней партии.

0 голосов
/ 12 марта 2011

Использование новой функции асинхронного ожидания / ожидания A # 5 в C # 5 кажется наилучшим способом выполнения запуска и вызова вызовов методов.

Что делает новая функция C # await?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...