Нравится.Вызов метода асинхронного вызова. Иногда
public ActionResult SomeAction()
{
var foo = SomeMethodAsync().Result;
if (foo)
Respository.Update(); //Repository pattern, calls save changes on my ObjectContext.
}
Порядок контроля произвольно, в зависимости от Лота вещей, веб-сервера, точки останова и т.д. Intermittently выше будет бросать на вызов Repository.Update() из-за следующих в контроллере.
protected override void Dispose(bool disposing)
{
Repository.Dispose();
}
Поэтому в зависимости от того, если SomeMethodAsync которые должны быть вызваны или нет, Dispose() вызывается и ObjectContext расположен как раз вовремя для того, чтобы быть необходимо. Очевидно, что сам контроллер не настроен, но что-то готовит его.
Могу ли я избежать этого?
Я показываю вам нижеследующее, чтобы вы могли видеть ConfigureAwait (false), который может или не может иметь к этому какое-то отношение. Если я удалю его, то есть вероятность того, что метод не будет завершен вообще - в производстве, в большинстве случаев нет.
public async Task<bool> SomeMethodAsync()
{
return await IOMethodAsync().ConfigureAwait(false);
}
Предположительно, могу ли я сделать асинхронное действие? Да, и я на днях, в широком масштабе, окажусь в контролируемой фазе. Скажите мне, могу ли я ожидать, что мои проблемы уйдут.
Почему я удаляю ObjectContext в Dispose()? Я не знаю, я забыл. Может быть, это больше не нужно. Но я бы хотел сохранить это до тех пор, пока не узнаю, следовательно, вопрос.
спасибо.
В вашем вопросе вы заявляете, что вызывается 'Dispose', а затем говорят, что« очевидно, что сам контроллер не расположен ». Что он? –
Хороший вопрос, и я сам этого не понимаю. Вызывается Disposed(). Затем выполняются условие и окончательный оператор действия ... которые находятся в контроллере ... который, очевидно, не был полностью удален в смысле чего-то еще, имеет ссылку на него; этот репозиторий, член, все еще существует ... – Martin
* Возможно * для типа, который должен быть GC'ed (и финализирован), пока есть еще код для запуска одним из его методов. Тем не менее, я был бы немного удивлен, увидев, что MVC демонстрирует это поведение, если вы не используете что-то нестандартное для жизни контроллера. Попробуйте ввести 'if (распоряжаться)' перед 'Repository.Dispose' (он должен быть там в любом случае; при завершении вы должны * не * вызывать' Dispose' в других экземплярах). –