Я просто новичок в этом мире асинхронного материала.
Пожалуйста, несите мою нехватку знаний.Async/await vs Task.Run in C#
Говорит, когда метод встреча ждет ... «Он рассказывает awaitable запустить оставшуюся часть метода, когда он завершает, а затем возвращается из метода асинхронного.»
я не сделал получите эту часть.
Значит ли это, что метод все еще продолжает работать синхронно и ждет до ожидаемого возвращения, а затем переходит к остальной части метода?
Если нет, объясните, почему тогдаTask.Run
необходим для запуска метода в фоновом режиме или в режиме пожара и забыли способ. Я все еще мог быть достигнут через Ожидать также правильно? то есть
Метод продолжает выполнять остальные операторы, не дожидаясь возвращения ожидания.
Надеюсь, что это похоже на подход фона. Или не так ли? Я запутался.Если метод отмечен асинхронной и ждут, и что в свою очередь вызывает другой метод асинхронно в отдельном слое, который также отмечен с асинхронной и поджидают ..
тогда как вызов первого метода, который отмечен в асинхронном и ждать от отдельного метода сказать имя ABC должно выглядеть?
Я не хочу комментировать этот метод для async/await. Таким образом,Task.Run(() => DoWork());
от ABC() в порядке, без маркировки async/wait?
Или это против принципа асинхронности?
Вот что я пытаюсь достичь ...
public IList<CreateCaseOutput> ABC(CreateCaseInput CreateCaseInput,SaveCaseSearchInput SaveCaseSearchInput)
{
CaseSQL.getABCParameters(CreateCaseInput, RequestType, out strSPQuery, out listParam);
var AcctLst = rep.ExecuteStoredProcedure<CreateCaseOutput>(strSPQuery, listParam).ToList();
if (!string.IsNullOrEmpty(AcctLst.ElementAt(0).o_case_seq.ToString()))
{
Task.Run(async() =>
{
await DEF(SaveCaseSearchInput, AcctLst.ElementAt(0).o_case_seq);
}).ConfigureAwait(false);
}
console.writeLine("After Async called");
return AcctLst;
}
public async Task<SaveCaseSearchOutput>> DEF(SaveCaseSearchInput SaveCaseSearchInput,Int64? case_key)
{
CaseSQL.getDEFParameters(SaveCaseSearchInput, case_key, out strSPQuery, out listParam);
var AcctLst = await rep.ExecuteStoredProcedureAsync<SaveCaseSearchOutput>(strSPQuery, listParam);
return AcctLst;
}
DEF, который асинхронной/Await должна вызываться в фоновом режиме в огонь и забыть подход от ABC и один раз выстрелил я хочу продолжить с остальной частью ABC и запустить DEF в фоновом режиме. Что случилось в этом огне и забыть о подходе? Если я называю
только
DEF(SaveCaseSearchInput, AcctLst.ElementAt(0).o_case_seq);
вместо
Task.Run(async() =>
{
await DEF(SaveCaseSearchInput, AcctLst.ElementAt(0).o_case_seq);
}).ConfigureAwait(false);
}
return AcctLst;
этот код работает синхронно в отладчике.
Я что-то не так?
Я хочу объяснить, но это уже здесь с простотой, посмотрите, помогает ли это https://stephenhaunts.com/2014/10/10/simple-async-await-example-for-asynchronous-programming/ – PKV
Хорошее объяснение [здесь] (http://stackoverflow.com/q/25078668/2530848) также обязательно проверьте [вступительную статью] Stephen (http://blog.stephencleary.com/2012/02/async-and-await. html) –
Я использую Run, чтобы выполнить синхронное выполнение задачи (работает в пуле потоков задач). т. е. '' 'var task = Task.Run (() => DoWork());/** сделать что-то еще **/ждать, '' ' –