Próbuję użyć asynchroniczne, czekać i zadania do realizacji jednego z wymagań asynchronicznych w mojej aplikacji internetowej. Mam poniżej kod w mojej klasie kontrolera. Potrzebuję tylko tego, aby po tym, jak przepływ dotarł do drukowania "kontrolera 1", system uruchomił metodę biznesową w oddzielnym wątku i bez czekania, aż system odpowiedzi dojdzie do polecenia drukowania w kontrolerze i wydrukuje "kontroler 2". Ale kiedy ja wykonując poniższy kod otrzymuję wzorzec wyjściowy jako to-Asynchroniczne zadanie w asp .net MVC 5
controller 1
PlandesignBS
controller 2
Podczas gdy ja spodziewałem this-
controller 1
controller 2 (Flow should reach here immediately rather than waiting
for business methods to get executed First)
Contoller Class Code
public class PlanDetailsController : Controller
{
[HttpPost]
public async Task<ActionResult> Generate(PlanDetailsVM planDetailsVM)
{
System.Diagnostics.Debug.WriteLine("controller 1");
//calls business method to generate
quoteId = await Task.Run(() => _planDesignBS.GenerateBS(planDetailsVM));
System.Diagnostics.Debug.WriteLine("controller 2");
return Json(quoteId , JsonRequestBehavior.AllowGet);
}
}
działalności Metoda kod -
public int GenerateBS(PandetailsDTO plandetails)
{
System.Diagnostics.Debug.WriteLine("PlandesignBS");
//STEP 1-> call to dataLogic Layer to use Entity Framework
// STEP 2-> call to a method (this method is part of dll used
//in our project and we don't have any control on it)
return quoteId
}
EDYCJA: Powodem, dla którego próbuję to zrobić, jest to, że chcę używać kilku żądań postów HTTP z mojej strony klienta. Załóżmy, że wywołuję metodę akcji Generuj najpierw od strony mojego klienta, a następnie nie chcę czekać na jej odpowiedź, a jednocześnie chcę wywołać inny wpis http.
EDYCJA: W tym kod EF, gdzie otrzymuję execption, gdy staram się przestrzegać kilku rozwiązań.Ta metoda zostanie wywołana z mojej metody GenerateBS. Otrzymuję wyjątek na tej linii wewnątrz getSICCode method-
DbContext.Database.ExecuteSqlCommand("spGET_SICCode @industryClasifID,@industrySubClasifID,@SICCode OUTPUT", industryClasifID, industrySubClasifID, SICCode);
EF Code
public class PlanDesignRepository : Repository<myobject>, IPlanDesignRepository
{
private IDbSet<myobject> _dbSet;
private DbContext _dbContext;
private IDbSet<myobject> DbSet
{
get
{
if (_dbSet == null)
{
_dbSet = base.UnitOfWork.Context.Set<myobject>();
}
return _dbSet;
}
}
private DbContext DbContext
{
get
{
if (_dbContext == null)
{
_dbContext = base.UnitOfWork.Context;
}
return _dbContext;
}
}
public string GetSICCode(IndustryClassficDO industryClassficDO)
{
SqlParameter industryClasifID = new SqlParameter("industryClasifID", SqlDbType.Int);
industryClasifID.Value = industryClassficDO.IndustryClassificationId;
SqlParameter industrySubClasifID = new SqlParameter("industrySubClasifID", SqlDbType.Int);
industrySubClasifID.Value = industryClassficDO.IndustrySubClassificationId;
SqlParameter SICCode = new SqlParameter("SICCode", SqlDbType.VarChar, 10);
SICCode.Direction = ParameterDirection.Output;
DbContext.Database.ExecuteSqlCommand("spGET_SICCode @industryClasifID,@industrySubClasifID,@SICCode OUTPUT", industryClasifID, industrySubClasifID, SICCode);
return (string)(SICCode.Value);
}
}
EDIT: Mam kilka połączeń HTTP POST, jak pokazano below-
AngularJS code for AJAX calls:
$http({
url: key_Url_Generate,
method: Post,
params: $scope.PlanDetails
}).then(function (result) {
//Notify user for success or failure
}
Jak rozporządzać swoją DataContext? – Stilgar
Co należy zrobić, aby go usunąć? –
Powinieneś zadzwonić do metody Dispose, ale nie mówię Ci, żebyś ją wyrzucił. Pytam, gdzie ją wyrzucisz, ponieważ zgłoszony wyjątek mówi, że metoda Dispose została wywołana, ale jakiś kod próbował użyć obiektu po tym. – Stilgar