Вопросы с тегами [async-await]

1

голосов
1

ответ
54

Просмотры

How to consume this EF Core C# async method in F#?

I am using F# with Entity Framework and I can't get my head around consuming C# async methods from F#. Despite others SO answers related to similar issues can't really get my head around. Here is my attempt with the code below, initially synchronous: let getAirport (id: Guid) = use context = new MyContext() context.Flights.Find id |> (fun x -> if box x = null then None else Some x) And its async counterpart: let getAirportAsync (id: Guid) = async { use context = new MyContext() let! flight = context.Airports.FindAsync id |> Async.AwaitTask return (fun x -> if box x = null then None else Some x) } However, when both are called in the main: [] let main argv = let myGuid = Guid.NewGuid() let airport = { Id = myGuid Name = "Michelle" X = 42.0 Y = 42.0 } AirportRepository.addAirport airport let thisAirport = AirportRepository.getAirport myGuid let thisAirportToo = AirportRepository.getAirportAsync myGuid |> Async.RunSynchronously assert (thisAirport = Some airport) assert (thisAirportToo = Some airport) 0 It cannot compile: Program.fs(61, 13): [FS0001] The type '('a -> 'a option)' does not support the 'equality' constraint because it is a function type Program.fs(61, 30): [FS0001] This expression was expected to have type ''a -> 'a option' but here has type ''b option' I read: https://medium.com/jettech/f-async-guide-eb3c8a2d180a https://docs.microsoft.com/en-us/dotnet/fsharp/tutorials/asynchronous-and-concurrent-programming/async C# async / await method to F#? I thought the process to consume an async C# method was: Pass the C# method to |> Async.AwaitTask Pass the result to let! Return that result Wrap everything in an async block which forms the body of an async F# function Use that newly async created F# function by passing it to |> Async.RunSynchronously What am I missing here?
Ehouarn Perret
1

голосов
1

ответ
476

Просмотры

Создание задачи без лямбды

Попытка передать функцию вместо лямбда-выражение и, наконец, перепутаны, почему линии: INT = t2 ждут Task.Run (() => Allocate2 ()); не вызывает ошибку. Это лямбда-выражение () => Allocate2 () не возвращает Task. Почему нет ошибки? Как создать задачу без лямбда-выражения с функцией Выделяют? статический асинхронный недействительный Пример () {INT = т ждет Task.Run (Распределить); t2 = INT ждут Task.Run ((=)> Allocate2 ()); Console.WriteLine ( "Вычисление:" + т); } Статические задачи Выделяют () {вернуться 1; } Статические INT Allocate2 () {возвращает 1; }
vico
1

голосов
2

ответ
91

Просмотры

Вызов синхронного метода в качестве асинхронной моды?

Я разрабатываю проект ASP.NET MVC WebAPI и один из методов должен сделать поиск LDAP. Объем информации, поиск получает от сервера LDAP обеспечивает вызов занимает не менее 7 секунд. Вызов, так как он использует классы и методы System.DirectoryServices.Protocols, синхронный и неизменяемый. Объем трафика, этот API будет получать достаточно большой (даже если API находится во внутренней сети), так что 7 секунд для каждого вызова на сервер LDAP не является хорошей идеей. Так что я хочу знать это: Это хорошая идея, чтобы обернуть это в асинхронном методе? Что такое правильный способ ASync этого вызова? (В ожидании Task.Run (() => Search (PARAMS)) приемлемый путь?)
Léster
1

голосов
3

ответ
83

Просмотры

Как поставить метод асинхронного в списке и вызывать их итеративны?

В последнее время я хочу осуществить проверку работоспособности для списка вызовов служб. . Они все асинхронной задачи (например, задачи method_name (...) Я хотел бы поставить все из них в списке я последовал ответ на этот пост: Сохранение списка методов в C # Тем не менее, они являются асинхронные методы, которые я ставлю. это как это: коллекция метод асинхронной List _functions = новый список {() => accountDetailsServiceProvider.GetEmployer (EmployerId), () => accountServiceProvider.GetAccountStatus (EmployerId)} Может кто-то направить меня на правильный путь для реализации методов ввода асинхронное в к списку и вызывать их итеративно? Спасибо заранее!
Terence
1

голосов
1

ответ
84

Просмотры

Асинхронный / ждать против тогда, что является лучшим для работы?

У меня есть простой код JavaScript, который выполнить запрос в API и вернуть ответ, просто. Но в этом случае я буду иметь тысячи запросов. Так, что один из вариантов кода будет работать лучше, и почему. Кроме того, какой из них рекомендуются в качестве хороших в эти дни обычаев? Первые варианты используют .Застут для решения обещания и seccond один используют асинхра / ждать. В моих тестах два варианта имел очень близкие результаты без существенных отличий, но я не уверен в масштабе. // Использование затем DoSomething (полезная нагрузка) {сопз URL = 'https: // ссылка-сюда / consultas'; вернуть this.axios.get (URL, {PARAMS: {маркер: payload.token, Chave: payload.chave,},}). Затем (соответственно => resp.data); } // Использование Асинхронный / асинхронной ждут DoSomething (полезной нагрузки) {сопзЬ URL = 'https: // ссылка-сюда / consultas'; константные RESP = ждут this.axios.get (URL, {Params: {маркер: payload.token, Chave: payload.chave,},}); вернуться resp.data; } Любое объяснение будет иметь большое значение.
Francisco
1

голосов
2

ответ
597

Просмотры

Использование JavaScript асинхр вместо setInterval

Скажем, я хочу, чтобы запустить процесс обновления функции () каждый второй. Я могу сделать это двумя способами: асинхронной функции интервала () {ждут новых Promise ((Рез, REQ) => {SetTimeout (Рез, 1000)}) обновления () интервал ()} или setInterval (обновление, 1000) Есть любая функциональная разница между этими двумя?
May0
1

голосов
0

ответ
150

Просмотры

Аутентификация и получить щебетать твиты с помощью ASP.NET WebForms (MVC)

AuthorizeAndGetTweets.cs с использованием системы; используя System.Collections.Generic; используя System.Linq; используя System.Net.Http; используя System.Text; используя System.Threading.Tasks; используя System.Web; используя System.Web.Script.Serialization; используя Jil; пространств имен locationapi.Models {общественного класса AuthorizeAndGetTweets {асинхронной статический открытый Задача whatToName () {строка customerKey = "K3TfA3pIB9F2zibelScwwRy24"; Строка SecretKey = "2mBJJk74MOmUV3byb0WP76iOmA1xsUkcYnb0ZUh9quPxJVdiwc"; Строка ScreenName = "Manisha_PL"; // строка ScreenName = "Моди"; Строка Count = "10"; струнные чириканье = ждут AuthorizeAndGetTweets.getTweets (customerKey, SecretKey, ScreenName, количество); // Console.WriteLine (» } общественных асинхронных статических getTweets задач (строка customerKey, строка SecretKey, строка ScreenName, кол-строка, строка маркер = NULL) {если (маркер == NULL) {маркер = ждут аутентификации (customerKey, SecretKey); } // Console.WriteLine ( "маркера внутри функции" + маркер); HttpRequestMessage requestingTweets = новый HttpRequestMessage (HttpMethod.Get, string.Format ( "https://api.twitter.com/1.1/statuses/user_timeline.json?count={0}&screen_name={1}&trim_user=1&exclude_replies=1", рассчитывать, ScreenName)); requestingTweets.Headers.Add ( "Разрешение", "Канал" + маркер); HttpClient HttpClient = новый HttpClient (); HttpResponseMessage чириканье = ждут HTTPClient. SendAsync (requestingTweets); Строка tweetsstring = ждут tweets.Content.ReadAsStringAsync (); //Console.WriteLine(tweetsstring); // --------------------- // вар сериализатору = новый JavaScriptSerializer (); // динамический wholeResponse = serializer.Deserialize (tweetsstring); // переменная enumerableWholeResponse = (wholeResponse, как IEnumerable); // если (enumerableWholeResponse == NULL) // возвращает нуль; // IEnumerable UserList = enumerableWholeResponse.Select (х => (Пользователь) х [ "пользователь"]); // Еогеасп (Пользователь U в USERLIST) // {// Console.WriteLine (u.id); // Console.WriteLine (u.id_str); //} // --------------------- возврат tweetsstring; } Общественных асинхронной статической Задача подлинности (строка customerKey, строка SecretKey) {HttpClient authenticationClient = новый HttpClient (); HttpRequestMessage authenticationRequestMessage = новый HttpRequestMessage (HttpMethod.Post, "https://api.twitter.com/oauth2/token"); вар customerInfo = Convert.ToBase64String (новый UTF8Encoding () GetBytes (customerKey + ":" +. SecretKey)); authenticationRequestMessage.Headers.Add ( "Авторизация", "Basic" + customerInfo); authenticationRequestMessage.Content = новый StringContent ( "grant_type = client_credentials", Encoding.UTF8, "применение / х-WWW-форм-urlencoded"); HttpResponseMessage authenticationResponse = ждут authenticationClient. SendAsync (authenticationRequestMessage); Строка JSON = ждут authenticationResponse.Content.ReadAsStringAsync (); AuthenticationTokenClass жетоны = JSON.Deserialize (JSON); //Console.WriteLine(tokens.access_token); //Console.WriteLine(tokens.token_type); вернуться tokens.access_token; // переменная сериализатору = новый JavaScriptSerializer (); // динамический элемент = serializer.Deserialize (JSON); //Console.WriteLine(json); // возвращает элемент [ "access_token"]; }}} TweetAndLocationController.cs с использованием системы; используя System.Collections.Generic; используя System.Linq; используя system.net; используя System.Net.Http; используя System.Web.Http; используя System.Web.Script.Serialization; используя locationapi.Models; Пространство имен locationapi. Контроллеры {класс TweetAndLocationController общественности: ApiController {публичная строка Get () {вернуть AuthorizeAndGetTweets.whatToName () Результат;. // список List = новый список (); //list.Add("Hello "); //list.Add("World "); // возвращает список; }}} Когда я отладки кода, управление переходит до HttpResponseMessage твиты = ждут httpClient.SendAsync (requestingTweets); в authorizeAndGetTweets.cs я не получаю выход вообще и браузер показывает символ загрузки. Где я буду неправильно. Как я должен это делать? //list.Add("World "); // возвращает список; }}} Когда я отладки кода, управление переходит до HttpResponseMessage твиты = ждут httpClient.SendAsync (requestingTweets); в authorizeAndGetTweets.cs я не получаю выход вообще и браузер показывает символ загрузки. Где я буду неправильно. Как я должен это делать? //list.Add("World "); // возвращает список; }}} Когда я отладки кода, управление переходит до HttpResponseMessage твиты = ждут httpClient.SendAsync (requestingTweets); в authorizeAndGetTweets.cs я не получаю выход вообще и браузер показывает символ загрузки. Где я буду неправильно. Как я должен это делать?
1

голосов
1

ответ
93

Просмотры

(Async & await) vs (without Async & await) in Web API

I am new with Async and await using C# Programming. In WebAPI, we have created two API Controllers one with Async and await Programming and other is without that. We have done load testing using JMeter and we have got following results. Users Sync Async 100 No Errors No Errors 500 No Errors No Errors 750 No Errors Errors - (59.0 %) - 502 Bad Gateway 763 No Errors Errors 764 No Errors Errors 765 Errors - (0.13 %) - 502 Bad Gateway Errors 1000 Errors Errors Can you any please explain/suggest which approach is best or how can we proceed ? API Code : GetPersonalDetailsController - Async and await Used public async Task GET([FromUri] RequestQueryListDTO objAPIRequest) { DateTime startResponseTime = DateTime.Now; Response objResponse = null; string strResponse = string.Empty; var HeaderType = Request.Content.Headers.ContentType; ProductBAL objProductBAL = null; try { if (objAPIRequest != null) { Task tskGetProductDetails = Task.Run(() => { objProductBAL = new ProductBAL(); return objProductBAL.GetProductDetails(objAPIRequest); //Business Access Layer Logic calling }); objResponse = await tskGetProductDetails; } else { objResponse = new Response(); objResponse.ReturnCode = -1; objResponse.ReturnMessage = "Missing Parameters."; } } catch (Exception ex) { \\ Exception Logging } finally { objProductBAL = null; } objResponse.ResponseTime = Math.Round((DateTime.Now - startResponseTime).TotalMilliseconds).ToString(); if (objResponse.ReturnCode == Convert.ToInt32(General.ReturnCode)) { return Content(HttpStatusCode.BadRequest, objResponse); } else { return Ok(objResponse); } } ======================================================================== GetPDPController - Without using Async and await public IHttpActionResult GET([FromUri] RequestQueryListDTO objAPIRequest) { DateTime startResponseTime = DateTime.Now; Response objResponse = null; string strResponse = string.Empty; var HeaderType = Request.Content.Headers.ContentType; try { if (objAPIRequest != null) { //Business Access Layer Logic calling } else { objResponse = new Response(); objResponse.ReturnCode = -1; objResponse.ReturnMessage = "Missing Parameters."; } } catch (Exception ex) { // Exception Logging Code } finally { objProductBAL = null; } objResponse.ResponseTime = Math.Round((DateTime.Now - startResponseTime).TotalMilliseconds).ToString(); if (objResponse.ReturnCode == Convert.ToInt32(General.ReturnCode)) { return Content(HttpStatusCode.BadRequest, objResponse); } else { return Ok(objResponse); } }
1

голосов
0

ответ
498

Просмотры

Переинициализация ChromiumWebBrowser из CEFSharp

Я работаю над проектом с использованием CEFSharp, который является в основном Interop оберткой Embedded Framework Chromium. Цель приложения для загрузки большого количества адресов и сохранять веб-страницы в виде PDF-файлов с помощью встроенного конвертора двигателя Chrome. Occassionally, один из URL, я пытаюсь загрузить вызывает проблемы и экземпляр веб-браузера Chromium больше не будет работать. Так как я не знаю ни одного способа повторной инициализации в API, я просто избавиться от текущего экземпляра и создать новый. Приведенный ниже код показывает, как я это делаю. Код, кажется, работает довольно хорошо, но иногда даже переинициализация не решает мою проблему. Я интересно, если я делаю что-то, что не подходит в моем примере. Любые предложения, было бы полезно. Несколько дополнительных примечаний: работает это на компьютере с Windows 7 (Дон» спросить т, у меня нет выбора), я должен скомпилировать это как разрядное приложение x86 32, потому что я используя некоторые старые компоненты COM Interop в приложении (нет, я не могу скомпилировать, как x64), я использую последний NuGet версия 63.0.2, точно не знаю, какая версия CEF используется под капотом. с использованием системы; используя System.Collections.Generic; используя System.Threading; используя System.Threading.Tasks; используя CefSharp; используя CefSharp.OffScreen; используя CEFNotes.Domain; используя log4net; Пространство имен CEFNotes.Browser {общественного запечатаны класса WebBrowser: IDisposable {частный статический WebBrowser _webBrowser; частное чтение Илог _log = LogManager.GetLogger (TypeOf (WebBrowser)); частный только для чтения словаря _badHosts = новый словарь (); частные PdfPrintSettings _printSettings только для чтения = новые PdfPrintSettings {HeaderFooterEnabled = ложь, HeaderFooterTitle = string.Empty, //Constants.Library, HeaderFooterUrl = "", PageHeight = 0, PageWidth = 0, Пейзаж = "Пейзаж" .equals (Constants.Orientation), MarginType = CefPdfPrintMarginType.Default, MarginBottom = 0, MarginLeft = 0, MarginRight = 0, MarginTop = 0, SelectionOnly = ложь, BackgroundsEnabled = истина}; частный ChromiumWebBrowser _browser; частная BOOL _disposed; частный WebBrowser () {_browser = новый ChromiumWebBrowser (string.Empty, новые BrowserSettings {WindowlessFrameRate = 1}) {RequestHandler = новый BrowserRequestHandler ()}; Результат переменного = Task.Run (асинхронный () => жду BrowserInitializedAsync ()) Результат. если (! результат) певд ApplicationException ( «Не удалось инициализировать браузер.»); } Общественности статической WebBrowser Instance => _webBrowser ?? (_WebBrowser = новый WebBrowser ()); общественные асинхронной Task GetHtml () {возвращение ждет _browser.GetSourceAsync (); } Частная Задача BrowserInitializedAsync () {VAR ТКС = новый TaskCompletionSource (TaskCreationOptions.RunContinuationsAsynchronously); EventHandler обработчик = NULL; Обработчик = (отправитель, арг) => {_browser.BrowserInitialized - = Обработчик; tcs.TrySetResult (истина); }; если (! _browser.IsBrowserInitialized) _browser.BrowserInitialized + = обработчик; еще tcs.TrySetResult (истина); вернуться tcs.Task; } Общественного BOOL Переинициализация () {попробуйте {_browser.Dispose (); _browser = NULL; _browser = новый ChromiumWebBrowser (string.Empty, новые BrowserSettings {WindowlessFrameRate = 1}) {RequestHandler = новый BrowserRequestHandler ()}; вернуться Task.Run (асинхронный () => жду BrowserInitializedAsync ()) Результат. } Задвижка (Исключение ех) {_log.Error ( "Не удалось повторно инициализировать", ех); } Вернуться ложным; } /// /// Получить HTML-документ для указанного URL /// /// URL-адрес для конкретного документа для его извлечения. /// Возвращает Задачу с логическим значением, связанным с ним. /// /// /// https://github.com/cefsharp/CefSharp/issues/1415 общественные задачи LoadPageAsync (строка адреса = NULL) {вар ТКС = новый TaskCompletionSource (TaskCreationOptions.RunContinuationsAsynchronously); Const INT таймаут = 20000; // 20 секунд вар таймер = новый таймер (OBJ => {{если попытаться (tcs.Task.IsCompleted) tcs.TrySetResult (ложь!); } Задвижка (Исключение ех) {tcs.TrySetException (ех); }}, Нулевой, тайм-аут, Timeout.Infinite); вар timer1 = таймер; tcs.Task.ContinueWith (т => {//Console.WriteLine("Dispose Продолжение побежал значение «+ t.Status.ToString ()); timer1.Dispose ();}); EventHandler обработчик = NULL; Обработчик = (отправитель, арг) => {// Ждать, пока страница, чтобы завершить загрузку не только первый кадр, если {если (Обработчик = нуль!) _browser.LoadingStateChanged - = обработчик (args.IsLoading!); ТКС. TrySetResult (истина); }}; _browser.LoadingStateChanged + = Обработчик; если _browser.Load (адрес) (string.IsNullOrEmpty (адрес)!); вернуться tcs.Task; } Общественных задач PrintToPdfAsync (строка путь) {вар браузер = _browser.GetBrowser (); вар хост = browser.GetHost (); вар обратного вызова = новый PrintToPdfCallbackAsync (); host.PrintToPdf (путь, _printSettings, обратный вызов); вернуться callback.Task; } Общественного недействительный BadHostCallback (строка хост) {если _badHosts.Add (хост, правда) (_badHosts.ContainsKey (хозяин)!); } Общественного BOOL IsBadHost (строка хоста) {вернуться _badHosts.ContainsKey (хост); } #Region IDisposable ~ WebBrowser () {Dispose (ложь); } Общественного недействительными Dispose () {Dispose (истина); GC.SuppressFinalize (это); } Частные недействительными Dispose (BOOL утилизации) {если (_disposed) возвращение; если (утилизация) _browser.Dispose (); _disposed = TRUE; }}} #Endregion
rjl
0

голосов
0

ответ
7

Просмотры

Рекурсии в асинхронном / метод не ожидают разрешения в основной функции

Я пытаюсь работать с рекурсией в asynсе / ждут функций. Проблема заключается в том, что не может получить окончательное обещание в основной функции, в которой я сначала вызвать задержку функции рекурсивного метода асинхронной (мс) {возвращение ждет нового обещание (Решимость => SetTimeout (решительность, мс))} Функция асинхронной рекурсии ( я) {возвратить новый посыл (асинхр (решение, отклонить) => {если (я == 0) {console.log ( 'я == 0') решимость (я)} еще {console.log ( `я = $ {I}. подождите 1 секунду ... `) i-- ждут задержку (2000) ожидают рекурсии (I)}})} функции асинхронной Main () {пусть I = ждут рекурсии (3) console.log (` КОНЕЦ RECURSION`) console.log ( `я => $ {я}`)} основной () console.log: я = 3. Подождите 1 второй ... я = 2. Подождите 1 второй ... я = 1. Подождите, 1 второй ... я == 0
Egeniy Ostrovskiy
1

голосов
0

ответ
398

Просмотры

d3.queue никогда не вызывает функцию AWAIT

Я пытаюсь читать данные из файла с d3.json, но функция Await () никогда не срабатывает, и я не могу понять, почему. Я уверен, что mapData.json присутствует в папке, из которой я управлял сервером HTTP, и никаких ошибок не регистрируется в консоли. d3.queue () .defer (d3.json, './mapData.json') .await (функция (ошибка, MapData) {если (ошибка) ошибка броска; console.log ( "Hello");}); Кроме того, если я заменю очереди (). Отложить (). Ждать () только с d3.json () (см фрагмент ниже), все работает. d3.json ( 'mapData.json') .then (MapData => {console.log ( "Привет из d3.json");}) .catch (е => {console.log (е);}); UPD: Кажется, проблема была с d3-выборки. Я имел скрипты загружены, как это: После того, как закомментировать строку, содержащую d3-выборку, я получил «Привет» вход правильно. Получение "
wicccked
1

голосов
1

ответ
296

Просмотры

Как я могу иметь как «огонь и забыть» и «гарантированно закончить» в .Net ядра MVC

В моем MVC приложения, у меня есть метод асинхронного, что мне нужно позвонить, но не хочу ждать. Я не забочусь об исключении либо потому, что моя среда журналирования будет поймать и журнал, что. Я делаю это сейчас: _ = auditService.AuditAsync (auditData); Что происходит, когда мой основной запрос HTTP делается, но моя служба аудита не приняла мой запрос аудита (медленная сеть)? Я не хочу ждать, но я хочу, чтобы закончить. Возможно ли это иметь как «огонь и забыть» и «гарантированно закончить»? Согласно этому сообщению SO, ASP.NET может бросить исключение. Является ли это по-прежнему происходит в Net Ядре? Примечание: это не является дубликатом этого поста и этот пост. Мой вопрос о том, будет ли ASP.NET дать мне ошибку на моем пути, чтобы назвать свой метод асинхронным.
Calvin
1

голосов
1

ответ
270

Просмотры

Использование LINQ для заполнения словаря метода асинхронного [дублировать]

Этот вопрос уже есть ответ здесь: Как увлажнять словарь с результатами асинхронных вызовов? 4 ответа Я пытаюсь заполнить словарь. Метод GetData, который возвращает данные в асинхронном поэтому я использую следующий код, чтобы получить словарь: Var = MyDictionary объекты .GroupBy (е => e.EntityId) .Select (е => e.First ()) .ToDictionary (е => е .EntityId, асинхронная сущность => ждет GetData (лица)); К сожалению MyDictionary имеет тип словаря Как заполнить с помощью асинхронной лямбда в ToDictionary?
jabko87
1

голосов
0

ответ
52

Просмотры

Why am I getting this JSON Parse error when fetching data from laravel 5.5 via async-await?

Я использую комбинацию Laravel и JavaScript для получения данных из базы данных. К сожалению, я получаю следующее сообщение об ошибке JSON.parse: неожиданный символ в строке 1 колонки 1 данных JSON Однако я использую функцию toJson () в Laravel, так что я понятия не имею, почему он говорит, это не правильно разобран действий с контроллера общественная функция getSourceListForSpecificSystem (интермедиат $ system_id) {$ системы = $ this-> sourceObject-> выберите ( 'идентификатор', 'имя') -> где ( 'systems_id', $ system_id) -> whereNull ( 'удалено') -> получить () -> toJson (); вернуть $ системы; } JavaScript константного getSources = функция асинхронная (SystemID) {попытаться {Const ответа = Await выборка ( '/ источников / get_systems_sources /' + SystemID); Const = JSON ждут response.json (); ждут console.log (JSON); } Поймать (е) {console.log (е); } //Console.log(json); }; getSources (SystemID); Теперь, если я называю URL непосредственно из браузера, я получаю то, что кажется правильным данных ([{ «ID»: 1, «Имя»: «Игроки Справочник»}]) Я уверен, что я просто делаю что-то глупое, но я я не уверен, что это такое. Буду признателен за любую помощь
JoeyD473
1

голосов
1

ответ
22

Просмотры

.NET асинхронной - когда мне нужно заботиться о том, что же SynchronizationContext используется после ЖДУТ?

Так что, если я жду функции, у меня есть выбор: Var = RetVal ждут someAwaitableFunction (); продолжение код ... или вар RetVal = жду someAwaitableFunction () ConfigureAwait (ложь). продолжение кода ... Последнее, как я понимаю, он говорит «да, я на самом деле не нужно, чтобы вы вновь войти с тем же SynchronizationContext когда продолжение происходит». Бывший обеспечивает его. Это нормально - просто мне кажется, дела, которые вы хотите использовать повторно синхронизирующий контекст мало. Кажется, только WPF - где вы хотите, чтобы гарантировать UI нить / контекст является тот, который продолжает вас, так что вы можете гадости вокруг с элементами пользовательского интерфейса. Существуют и другие ситуации? Я на самом деле не видел ни в примерах, и тот, который обсуждается все время это ... ситуации нить пользовательского интерфейса, который я в курсе. Заранее спасибо!
Coopernick
1

голосов
0

ответ
73

Просмотры

JetEntityFrameworkProvider запросы на один резьбовой блок запросы на других потоках

Я подключение к базе данных MS-ACCESS использования Entity Framework и JetEntityFrameworkProvider. У меня есть некоторые долго выполняющиеся запросы, мне нужно работать, так что я запускать их на нить с помощью Task.Run. Проблема я столкнулся в том, что, несмотря на то, я использую отдельный поток для запроса, и он использует собственную связь и контекст, который не используется совместно с чем-либо еще, все остальные запросы на базе должны ждать, пока сложный запрос не завершится , Ниже приведен минимальный воспроизводимый пример, который я придумал. Это конструктор для модели представления. Public Sub New (mainViewModel Как MainViewModel, MAINITEM в качестве продукта) _mainViewModel = mainViewModel Me.MainItem = MAINITEM «Этой строки фактически изменяет поведение программы», так как представление данных-привязки к поставщику. ' Читая его здесь заставляет EF, чтобы загрузить его, прежде чем начать "сложный запрос ниже. Dim п = mainItem.Supplier.Name Task.Run (Sub () Dim сопп = Новый JetConnection ($ "Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = C: \ Users..mdb;") Dim контекст = Новый MyContext (Conn) Dim запрос = MessageBox.Show ($ "Количество запросов:. {query.Count}") End Sub) End Sub Таким образом, этот вид будет отображаться нормально. Но если бы я вернуться обратно к странице списка продукта, то никаких продуктов не будут отображаться до тех пор, выше запрос не завершен. Если я закомментируйте чтения имени поставщика, то этот вид будет работать точно в первый раз, но все последующие времена сам вид не будет отображаться на всех, пока запрос не завершится. Кроме того, ToListAsync не похоже на работу. Похоже, он просто выполняет синхронно. Мои вопросы: Что происходит? Почему запросы на одном потоке с использованием соединения, блокирующие запросы на другой поток, используя другое соединение? Как исправить или обойти эту проблему так долго выполняющиеся запросы могут выполняться без блокировки пользовательского интерфейса или других запросов.
ShyGuy
1

голосов
0

ответ
17

Просмотры

Поймать несколько ответов XHR на нескольких page.click (без перезагрузки страницы или изменений)

page.on ( 'ответ', ответ => {// разрешить только XHR если ( 'XHR' == response.request () ResourceType ()) {возвращение;!.} console.log (response.url ()); }); ждут page.click ( '# первый пролет'); жду page.click ( '# пролета второго'); жду page.click ( 'пролет # третьего'); В результате приведенного выше примера, только Ajax запросы, соответствующие размаху # первый улавливаются page.on. Пролет # второй и третий пролет # не поймали. Использование page.waitForNavigation, кажется, не имеют никакого эффекта.
Timur Aminev
1

голосов
1

ответ
466

Просмотры

how to wait for API response before executing code in Angular

I have to wait for data from an API to set value of a variable and use it in a if condition. The problem is i'm not clear how to wait for the data using async and await. I tried a few things below is the code . currentObj.isObjEditable = this.isObjEditable(obj); async isObjEditable(obj: any) { if (this.isContentEditable === undefined) { let test = await this.getsocialMediaData(); console.log(test); } else { if (this.isContentEditable) { if (some Condition1 ) return true; else if (condition2) return true; else if (condition 3) return true; else { return false; } } else return false; } async getsocialMediaData() { this.commonService.getSocialMediaSettings().subscribe(value=> { return value; }); } getSocialMediaSettings(){ return Observable.timer(0, 60000) .switchMap(() => this.http.get(url, { headers: headers, method: 'GET' })) .map(res => res.json()); } when i log test it returns a promise.The value of isContentEditable is set from the data received from the API. I know what i have done is not correct but i also dont know how to correct this or what is the right approach. Please Guide Thanks
Shruti Nair
1

голосов
3

ответ
67

Просмотры

NodeJS: Удаление элементов массива с использованием асинхронной операции по одному

Мне нужно работать по каждому пункту массива и эта операция является асинхронной один. Мне нужно, чтобы перейти к следующему пункту только тогда, когда первый один обрабатывается. Мне нужно, чтобы вернуть истину, если все элементы обработаны. Этот фрагмент кода сам должен быть обещание, что я могу цепь на к. Это то, что я пытался делать: DeleteAll (элементы) {возвратить новый посыл ((решительность, отклонять) => {items.forEach (асинхронная элемент => {ждет this.deleteOne (элемент); // Асинхронной операции удаления items.shift ( ); если (items.length-1 индекс ==) решимость (истина)});}); }
Abhiman
1

голосов
0

ответ
113

Просмотры

Пустой файл почтового индекса, используя zip.js и browserfs

Я использую две библиотеки zip.js и BrowserFS, и я хочу, чтобы создать почтовый архив в файловой системе из каталога. У меня есть функция, которая траверс каталога: асинхронная функция traverseDirectory (реж, обратный вызов) {список уага = жду ПИФ (fs.readdir) (реж); для (вар я = 0; г <list.length; я ++) {console.log ( 'для' + I); вар имя_файла = path.join (реж, список [я]); вар стат = ждут ПИФы (fs.stat) (имя файла); если {если (stat.isDirectory ()) {ждет traverseDirectory (имя файл, обратный вызов) (filename.match (/ ^ \ {1,2} $ /!).); } Еще {console.log ( 'обратного вызова'); ждут обратного вызова ( «файл», имя файла); console.log ( 'awated'); }}} Ждут обратного вызова ( 'каталог', реж); } И функции, которые используют почтовый индекс. JS для создания архива. Функция асинхронной makeZip (реж, FilePath) {вар zipWriter = ждут новое Promise (функция (решение, отклонить) {zip.createWriter (новый zip.BlobWriter ( "приложение / почтовый"), функция (автор) {Решимость (автор);} , отклонить);}); ждут traverseDirectory (реж, функция асинхронной (стат, путь) {если (стат == 'файл') {ждут нового Promise (функция (решение, отклонить) {console.log (путь); fs.readFile (путь, функция (ERR , данные) {если (ERR) {возвращение отвергает (ERR);} переменная блоб = новый Blob ([Data], {типа: "текст / обычный"}); zipWriter.add (путь, новый zip.BlobReader (блобо) , разрешить); }); }); }}); console.log ( '>>>>>>>>>>>>> почтовый'); вернуть новый Promise (функция (решение, отклонить) {zipWriter.close (функция (BLOB) {вар FileReader = новый FileReader (); fileReader.onload = функция () {вар ArrayBuffer = this.result; fs.writeFile (FilePath, новый buffer.Buffer (ArrayBuffer), функция (ERR) {если (ERR) {отвергнуть (ERR);} еще {решимость ();}});}; fileReader.readAsArrayBuffer (блоб);});}); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым. >> застежка-молния »); вернуть новый Promise (функция (решение, отклонить) {zipWriter.close (функция (BLOB) {вар FileReader = новый FileReader (); fileReader.onload = функция () {вар ArrayBuffer = this.result; fs.writeFile (FilePath, новый buffer.Buffer (ArrayBuffer), функция (ERR) {если (ERR) {отвергнуть (ERR);} еще {решимость ();}});}; fileReader.readAsArrayBuffer (блоб);});}); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым. >> застежка-молния »); вернуть новый Promise (функция (решение, отклонить) {zipWriter.close (функция (BLOB) {вар FileReader = новый FileReader (); fileReader.onload = функция () {вар ArrayBuffer = this.result; fs.writeFile (FilePath, новый buffer.Buffer (ArrayBuffer), функция (ERR) {если (ERR) {отвергнуть (ERR);} еще {решимость ();}});}; fileReader.readAsArrayBuffer (блоб);});}); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым. OnLoad = функция () {вар ArrayBuffer = this.result; fs.writeFile (путь_к_файл, новый buffer.Buffer (ArrayBuffer), функция (ERR) {если (ERR) {отклонять (ERR);} еще {решительности ();}}); }; fileReader.readAsArrayBuffer (блоб); }); }); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым. OnLoad = функция () {вар ArrayBuffer = this.result; fs.writeFile (путь_к_файл, новый buffer.Buffer (ArrayBuffer), функция (ERR) {если (ERR) {отклонять (ERR);} еще {решительности ();}}); }; fileReader.readAsArrayBuffer (блоб); }); }); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым. readAsArrayBuffer (блоб); }); }); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым. readAsArrayBuffer (блоб); }); }); } Проблема в том, что почтовый файл пуст, когда я загрузить его и открытым.
jcubic
1

голосов
2

ответ
236

Просмотры

Приращение по одному с асинхронным ждут в узле Javascript

Как я могу получить результат от функции «три», чтобы console.log в функции «один»? один = асинхронные (число) => {console.log ( `мы получили $ {число}`) ждем два (числа) console.log ( 'числа три должно быть здесь')} два = асинхронным (число) => { номер ++ console.log ( `Я получил $ {номер}`) ждут три (число)} три = (число) => {номер ++ console.log ( `последнее, но не менее $ {число}`)} один (1)
Saibot
1

голосов
0

ответ
212

Просмотры

Как использовать существующий пул соединений SQL Server с помощью асинхр / ждут модели внутри array.map с использованием Promise.All

Этот код приводит к «Connection еще не открыт.» ошибка. Бассейн подключен и доступен для первого выбора, где я получаю записи для обновления. После того, как я обрабатываю мои данные у меня есть массив операторов UPDATE. Тогда встраиваемая функция асинхронной работает и приводит к указанной выше ошибке. Кроме того, я попытался запустить несколько операторов UPDATE с помощью одного запроса. Это приводит к неведомому ошибки, если массив обновления запроса не имеет только один элемент массива. Это работает против SQL Server 2000. константного doQuery = асинхры (бассейн, sqlStr) => {возвращение ждет pool.request () запрос (sqlStr). }; Const updateResidental = асинхронной арг => {пусть toUpdateSql = `SELECT * FROM бла бла ГДЕ = бла)`; Const toUpdate = (Await doQuery (args.pool, toUpdateSql)) записей. константное sqlStrings = [ 'ОБНОВЛЕНИЕ blah1;', 'UPDATE blah2;',» UPDATE blah3; ']; (Асинхронный бассейн => {Обратно ждет Promise.all (sqlStrings.map (асинхронная sqlStr => {возвращение ждет doQuery (бассейн, sqlStr);})) затем (результаты => {console.log (результаты);}.). улов (ERR => {console.log (ERR)});}) (args.pool); }
Jeff Greer
1

голосов
0

ответ
11

Просмотры

Вызов зависимых методы синхронно в JavaScript [дубликат]

Этот вопрос уже есть ответ здесь: Как вернуть ответ от асинхронного вызова? 34 ответов Почему моя переменная неизмененном после того как я изменить его внутри функции? - Асинхронный код ссылки 6 ответов у меня есть 3 метода, как показано ниже. _uploadImages () принимает изображения массив объектов. Я хочу _uploadImages () для завершения первого и возвращает все адреса из загруженных изображений. Тогда я хочу, чтобы передать эти адреса другому методу, чтобы сохранить на другом сервере. Но проблема _uploadImages () возвращает пустой массив сразу. _uploadImages (изображения) {пусть imageUrls = []; images.map ((изображение, индекс) => {пусть FormData = новый FormData (), пусть файл = {URI: image.path, введите: image.mime, имя: image.path. подстрока (image.path.lastIndexOf ( '/') + 1) размер: image.size} formData.append ( 'файл', файл); formData.append ( 'большой палец', 'вопросы'); апи .uploadImage (FormData) .then ((ответ) => {если (response.data = NULL) {пусть IMG = {имя: 'Image' + (индекс ++), URL: response.data.body.file , тип: 'изображения'}; imageUrls.push (IMG);} //console.log(imageUrls);}) .catch ((ошибка) => {console.log (ошибка);}); }); вернуть JSON.stringify (imageUrls); } _SaveQuestion (PostData) {console.log (PostData); апи .postQuestion (PostData) .then ((ответ) => {console.log (ответ);}) .catch ((ошибка) => {console.log (ошибка);}); } _OnQuestionFormSubmit () {пусть изображения = this.state.images; пусть imageUrls = this._uploadImages (изображения); console.log (imageUrls); пусть PostData = {Mediaş: imageUrls} this._saveQuestion (PostData); } Может кто-нибудь дать некоторое представление об этом? console.log (imageUrls); пусть PostData = {Mediaş: imageUrls} this._saveQuestion (PostData); } Может кто-нибудь дать некоторое представление об этом? console.log (imageUrls); пусть PostData = {Mediaş: imageUrls} this._saveQuestion (PostData); } Может кто-нибудь дать некоторое представление об этом?
1

голосов
0

ответ
105

Просмотры

Правильный способ превратить синхронный метод доступа к данным с асинхронным

я в настоящее время работаю над проектом апите Web, где мы используем шаблон репозитория, но, к сожалению, мы не используем EF. Таким образом, для уровня доступа к данным мы используем ADO.NET, в которых мы называем хранимые процедуры в базе данных. Bad архитектуры я знаю. Во всяком случае, проблема я недавно обнаружил (в связи с тем, я работал на других слоях), что даже если все слои реализуются с помощью задач и уровня доступа к данным не является, и, если я не ошибаюсь, если в цепи асинхронного метод вызывает есть синхронный вызов метода, который превращает весь процесс в синхронный. Таким образом, изначально я имел такие методы, как этот: общественный DataTable GetClients () {с помощью (вар соппы = новый SqlConnection (CMS)) {используя (вар CMD = новый SqlCommand ( "[DBO] [ClientsReturn].")) {Cmd.Connection = соппы; CMD. CommandType = CommandType.StoredProcedure; conn.Open (); вар адаптер = новый SqlDataAdapter (CMD); вар DS = новый набор данных (); adapter.Fill (DS); вар T = ds.Tables [0]; вернуться T; }}} Таким образом, после некоторого поиска я изменить метод и вообще классы к чему-то вроде общественных асинхронной Задачи GetClients () {вар DS = новый DataSet (); используя (вар Conn = новый SqlConnection (CMS)) {использование (вар CMD = новый SqlCommand ( "[DBO] [ClientsReturn].")) {cmd.Connection = соппы; cmd.CommandType = CommandType.StoredProcedure; ждут conn.OpenAsync (); вар адаптер = новый SqlDataAdapter (CMD); ждут Task.Run (() => adapter.Fill (DS)); вар T = ds.Tables [0]; вернуться T; }}} Это смотрит прямо на вас? Любые предложения? Заранее спасибо.
k.explorer
1

голосов
1

ответ
319

Просмотры

NodeJS поток плохо возвращается через асинхронный / Await

Я пытаюсь проверить, если изображение существует в папке. Если он существует, я хочу, чтобы труба ее поток в разрешении (я использую Express) Если он не существует, я хочу сделать еще одну вещь. Я создал функцию асинхронной, который должен либо вернуть поток на изображении, если оно существует, или ложная, если он не делает. Я получаю поток, когда я это делаю, но я получаю бесконечную нагрузку на браузер, как если бы была проблема с потоком. Вот минимальное воспроизводство я мог бы: Ссылка на работоспособный код сопзЬ выразить = требуется ( «экспресс»); Const = путь требует ( 'путь'); константное фс = требуется ( «фс»); Const приложение = экспресс (); app.get ( '/', асинхронной (REQ, Рез) => {// Проверяем, если изображение уже конвертированы, возвращая поток или ложное константный доб = 'JPG'; Const imageConvertedStream = ОЖИДАНИЕ imageAlreadyConverted (». / Foo», 1, '100x100', 80, доб); // Изображение уже конвертированы, мы отправляем его обратно, если (imageConvertedStream) {console.log ( «образ существует»); res.type ( `изображение / $ {внутр}`); imageConvertedStream.pipe (RES); вернуть; } Еще {console.log ( 'Изображение не найден'); }}); app.listen (3000, () => {console.log ( 'сервер начал на порту 3000');}); Функция асинхронной imageAlreadyConverted (BasePath, идентификатор, размер, качество, extWanted) {возвратить новый посыл (решительность => {// Если мы знаем, разыскиваемого расширение, мы проверяем, если она существует пусть ImagePath, если (extWanted) {ImagePath = path.join (BasePath, размер, `IMG _ $ {ID} _ $ {качество}. $ {ExtWanted} `); } Еще {ImagePath = path.join (BasePath, размер, `IMG _ $ {ID} _ $ {качество} .jpg`); } Console.log (ImagePath); Const ReadStream = fs.createReadStream (ImagePath); readStream.on ( 'ошибка', () => {console.log ( 'ошибка'); Решимость (ложь);}); readStream.on ( 'читаемого', () => {console.log ( 'читаемого'); Решимость (ReadStream);}); }); } 95% моих изображений будут доступны и мне нужна производительность, небось проверки с fs.Stats, а затем создать поток занимает больше времени, чем пытаться создать поток и обработку ошибок. Const ReadStream = fs.createReadStream (ImagePath); readStream.on ( 'ошибка', () => {console.log ( 'ошибка'); Решимость (ложь);}); readStream.on ( 'читаемого', () => {console.log ( 'читаемого'); Решимость (ReadStream);}); }); } 95% моих изображений будут доступны и мне нужна производительность, небось проверки с fs.Stats, а затем создать поток занимает больше времени, чем пытаться создать поток и обработку ошибок. Const ReadStream = fs.createReadStream (ImagePath); readStream.on ( 'ошибка', () => {console.log ( 'ошибка'); Решимость (ложь);}); readStream.on ( 'читаемого', () => {console.log ( 'читаемого'); Решимость (ReadStream);}); }); } 95% моих изображений будут доступны и мне нужна производительность, небось проверки с fs.Stats, а затем создать поток занимает больше времени, чем пытаться создать поток и обработку ошибок.
Kiruchi
1

голосов
2

ответ
178

Просмотры

Использование приостановка функции в андроиде заставки

Мой экран заставки приложения используется для извлечения данных из сети и после выборки данных успеха, я хочу, чтобы отправить пользователь на главный экран. Как правило, мы используем Thread.sleep или Handler, чтобы остаться на экране выплеска в течение некоторого времени. Мы можем сделать это, используя функцию Котлин приостановить?
1

голосов
0

ответ
171

Просмотры

Асинхронная операция превысила ожидание страницы (пытаюсь использовать HttpRequestMessage с ASP.NET WebForms страниц)

Я создал веб-API в AWS, что я пытаюсь получить JSON назад с помощью веб-страницы, построенной в ASP.NET WebForms (самые современные версии). Я не могу получить асинхронная часть работы. Либо метод GET вешает, казалось бы, навсегда, или - следуя передовой практике подход с документацией Microsoft - я получаю эту ошибку после того, как некоторое время: System.Web.UI.d__554.MoveNext: [TimeoutException асинхронная операция превысил ожидания страницы.] () +984 Я знаю, что это что-то делать с ожиданием / асинхронной частью коды и быть в ASP.NET из следующих действий. Если я использую очень похожий код в консольном приложении работает нормально. Если я называю веб-API с помощью Почтальон он работает отлично. Я сделал асинхра = True в директиве страницы. Вот моя страница загрузки защищен недействительным Page_Load (объект отправителя, EventArgs е) {попробуйте {RegisterAsyncTask (новый PageAsyncTask (GetStuffAsync)); } Задвижка (Исключение ех) {renderStoreCards.Text = ex.Message; }} Вот мой метод частного асинхронного Task GetStuffAsync () {строка testHtml = String.Empty; попробуйте {вар подписавшего = новый AWS4RequestSigner ( "AccessKey", "SecretKey"); Запрос вар = новый HttpRequestMessage {Метод = HttpMethod.Get, RequestUri = новый Uri ( "https://some-aws-address-changed-for-stack-overflow.execute-api.ap-southeast-2.amazonaws.com/ Прод / столы / InSiteStoreInformation / ИмяСервер ")}; запрос = ждут signer.Sign (запрос, "выполнить-API", "ар-юго-восток-2"); вар клиент = новый HttpClient (); ответ вар = ждут client.SendAsync (запрос) .ConfigureAwait (ложь); Строка responseString = ждут response.Content.ReadAsStringAsync (); } Задвижка (Исключение ех) {renderStoreCards.Text = ex.Message; }} Приведенный выше пример производит TimeoutException. Ранее к вышесказанному, я попытался следующий код. Это прекрасно работает в консольном приложении, но не на странице ASP.NET. Класс Program {статической силы Main (string [] арг) {попробуйте {MainAsync () Wait (). } Задвижка (Исключение ех) {Console.WriteLine ($ "Исключение произошла {ex.Message}"); Console.ReadKey (); }} Статической асинхронной Task MainAsync () {{попытаться уаг подписавшего = новый AWS4RequestSigner ( "Accesskey", "SecretKey"); вар запрос = новый HttpRequestMessage {Метод = HttpMethod.Get, RequestUri = новый Uri ( "HTTPS: //.execute-api.ap-southeast-2.amazonaws.com/Prod/tables/InSiteStoreInformation/ServerName")}; запрос = ждут signer.Sign (запрос, "выполнить-API", "ар-юго-восток-2"); вар клиент = новый HttpClient (); ответ вар = ждут client.SendAsync (запрос); вар responseStr = ждут response.Content.ReadAsStringAsync (); динамические продаж = Newtonsoft.Json.JsonConvert. DeserializeObject (responseStr); ЕЫпе ($ "Сервер = {продажи [0] .ServerName}"); Console.ReadKey (); Console.Write (responseStr); Console.ReadKey (); } Задвижка (Исключение экс) {бросок (ех); }}} Я ни в коем случае эксперт в асинхронном / ждать комбинации, но это, кажется, что HttpClient я использую не имеет синхронных альтернатив, так что я должен понять это.
JamesMatson
1

голосов
2

ответ
206

Просмотры

Async/await functionality for db.eval aggregate

Я пытаюсь выполнить db.collection.aggregate () запрос в вызове db.eval (). Я использую Eval (), потому что я делаю динамическое число выборок, поэтому я генерировать запрос на конкатенации соответствующих строк. Запрос отлично работает, когда я вручную удалить кавычки из строки: ждать db.collection ( «Продукты») агрегат ([{$ поиска:. {Из: «» Golomax, localField: «штрих-код», foreignField: «штрих-код», как: 'Golomax'}}, {$ разматывать: {путь: '$ Golomax', preserveNullAndEmptyArrays: истинно}}, {$ поиска: {из: 'Masivos SA', localField: 'штрих-код', foreignField: 'штрих-код', как: 'Masivos SA'}}, {$ разматывать: {путь: '$ Masivos SA', preserveNullAndEmptyArrays: истинный}}, {$ из:. 'Output'}]) ToArray (); К сожалению, это не работает, когда я использую строку в вызове db.eval (). Я поставил кавычки вокруг фрагмента кода выше, и установите строку равной переменный «запрос» и попытался это: db.eval ( «асинхронная функция () {» + запрос + возврат;} ', функция (эээ, результат) { console.log ( 'результат:', результат);}); Я также попытался удалить слово «асинхронный», и это до сих пор не работало. Как убедиться, что функция завершит агрегирование перед возвращением? Благодарю. - EDIT - я только что заметил, что db.eval () является устаревшим и планируемый для удаления. В качестве альтернативы можно «реализовать эквивалентные запросы / операции с помощью обычного MongoDB языка запросов и клиентский драйвер API.»
Janet Lee
1

голосов
1

ответ
121

Просмотры

Код выпадать из улова?

У меня есть фоновая задача, которая опрашивает базу данных SQL Server каждый 200 мс. Код выглядит следующим образом: слушатель = ждем Task.Factory.StartNew (асинхронный () => {{попробовать в то время как (истинно) {topToken.ThrowIfCancellationRequested (), попробуйте {используя (вар DBConnection = новый SqlConnection (ConnectionString)) с использованием (вар команда = новый SqlCommand ( "marc.GetEvents", DbConnection)) {ждут command.Connection.OpenAsync () ConfigureAwait (ложь);. command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue (» } Поймать (Exception ех) {если (ех SqlException && topToken.IsCancellationRequested) {певд OperationCanceledException ( "Операция отменена пользователем", экс); } Logger.Warn (например, $ "Исключение на избирательном Codeks дб Ожидание {delayOnSqlError} мс ...."); // это хит _OnReaderEvent.OnError (ех); ждут Task.Delay (delayOnSqlError, topToken) .ConfigureAwait (ложь); // вероятно, не выполняется}}} поймать (OperationCanceledException) {logger.Info (» Слушая задание закончилось. Служба остановка ");} Добыче (Exception ех) {logger.Error (ех "? Общее исключение"); // здесь падение}}, TaskCreationOptions.LongRunning) .ConfigureAwait (ложь), Сегодня я получил отчет о найденном . Дело в том, что эта задача закончилась преждевременно Согласно журналам, первый набор улов попал и сообщает об SQL Exception: 2018-08-01 17: 42: 08,6348 | Предупреждать | Exception на избирательных Codeks дб Waiting ... 5000 мс. System.Data.SqlClient.SqlException (0x80131904):.. транзакций (Process ID 53) зашло в тупик на замок | буферные связи ресурсов с другим процессом и был выбран в качестве тупиковой жертвы Rerun сделки Но вместо задержки, она выпадает из петли immedialtely к внешнему улову с тем же исключением. 2018-08-01 17: 42: 08,6488 | Error | Jantar.CodeksConnector | Общее исключение System.Data.SqlClient.SqlException (0x80131904): Транзакция (идентификатор процесса 53) зашло в тупик на замок | буферные связи ресурсов с другим процессом и был выбран в качестве тупиковой жертвы. Перезапустите сделку. на System.Data.SqlClient.SqlConnection.OnError (SqlException исключения, булева breakConnection, Action1 wrapCloseInAction) в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, булева breakConnection, Action1 wrapCloseInAction) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, булева callerHasConnectionLock, булева asyncClose) при System.Data.SqlClient.TdsParser. 03] @sellotape указал мне в правильном направлении. В соответствии с обновленной записью второго журнала, то StackTrace становится ясно, что исключение вызвано повторно в Subject.onError (бывший) (который я снял, потому что это ошибка). Это была двойная ошибка, так как нет абонентской ошибки. Я не знал, что в данном случае вызвано повторно исключение, но только если есть любой абонент, и проглотил, если его нет.
ZorgoZ
1

голосов
0

ответ
57

Просмотры

Детонация: диалог поп раньше загрузки данных

У меня есть представление списка с ограниченными данными и диалоговое окно с полной полной информации, которые пользователь может изменить в принципе сделать запрос книга сетевого вызова network.As становится ASYN что приводит выскочить диалоговое окно ранее измененных данных. Я использую Bloc Pattern и жду сетевого вызова. новый FlatButton (ребенок: новый текст ( 'BOOK', стиль: theme.textTheme.body1.copyWith (цвет: Colors.white)), onPressed: () {openShiftBloc.bookPressedSink.add (event.id); Таймер (Продолжительность ( миллисекунд: 500), () => Navigator.pop (контекст, DismissDialogAction.cancel)); // Navigator.pop (контекст, DismissDialogAction.save);})
Mercy peka
1

голосов
0

ответ
247

Просмотры

Можно ли преобразовать HTTP-клиент углового метода toPromise в асинхронный и ждать?

У меня есть наблюдаемый в моем поставщике, который превращается в обещание, используя пример метода toPromise () ниже: getAllProvinces () {вернуть this.http.get ( `активы / фот / provinces.json`) .toPromise ()} и мой компонент Я хотел бы использовать асинхра и ждать, чтобы вернуть значение асинхронно пример ниже: асинхронную getAllProvince () {попробуйте {константные провинции = ждут this.registerApi.getAllProvinces console.log (провинции)} поймать (е) {console.log (е) } // this.registerApi.getAllProvinces (). затем (ответ => this.provinces = ответ) .catch (ERR => console.log (ERR))} Я также хочу, чтобы поймать ошибку, если что-то пойдет не так. Может кто-нибудь пролить некоторый свет для меня преобразовать свое обещание в асинхронный и ждать, я до сих пор не получаю использование асинхронных и ждать, я знаю, что это просто эволюция обещаний. Цените, если кто-то может помочь. Заранее спасибо.
KnowledgeSeeker
1

голосов
0

ответ
68

Просмотры

Тип ошибка не пойман в асинхронном жду

У меня есть обещание запроса БД SQL в функции асинхронной this.db.executeSql. В некоторых случаях this.db будет неопределенным. Я ожидаю, что TypeError, что случится быть пойманным уловом. Но в конечном итоге получить core.js: 1449 ERROR Ошибка: неперехваченным (обещанию): TypeError: Не удается прочитать свойство 'ExecuteSQL' неопределенной TypeError: Не удается прочитать свойство 'ExecuteSQL' неопределенных асинхронной SqlExecute (SQL, PARAMS = {}) { попробуйте {возвращение ждут this.db.executeSql (SQL, Params); } Задвижка (ERR) {вернуть Promise.reject (ERR); }} Что я делаю неправильно?
raj
1

голосов
0

ответ
62

Просмотры

ASP.NET ядра ждут WebSocket.ReceiveAsync Предотвращает IIS от закрытия dotnet.exe

У меня есть 2.1-сайт ASP.NET Core. Он использует WebSockets, в частности System.Net.WebSockets. Система WebSocket в целом работает очень хорошо. Но когда я пытаюсь остановить сайт из IIS или остановить пул приложений IIS, dotnet.exe продолжает работать. Я должен завершить процесс с помощью диспетчера задач для сайта, чтобы быть действительно остановлен. После многих проб и ошибок, я нашел dotnet.exe остановится нормально, если я деактивировать код, который обрабатывает WebSockets. Но когда я использую WebSockets, сайт не будет останавливаться при запросе из IIS. При использовании WebSockets, выполнение ждет здесь: результат = ждет webSocket.ReceiveAsync (новый ArraySegment (буфер), CancellationToken.None) .ConfigureAwait (ложь); Как правило, я бы ожидать выполнения ждать здесь. Но так как приложение останавливается, мне нужен этот вызов ReceiveAsync вернуться. Я' м интересно, если мне нужно использовать CancellationToken, но чтобы сделать это, мне нужно использовать правильный CancellationToken конечно. Может кто-то рекомендовать, как справиться с такой ситуацией, так что операция может закончиться Await грациозно, когда сайт или пул приложений остановлен из IIS? Спасибо.
user1325179
1

голосов
0

ответ
21

Просмотры

AsyncAutoResetEvent не работает в методе асинхронного WCF

Я создал службу WCF с помощью Visual Studio 2017 версии Community (использующей TAP). Я использовал AsyncAutoResetEvent из ссылки Microsoft.VisualStudio.Threading но мне кажется, что это WaitHandle не получает сигнал после вызова функции Set. Служба размещается в консольном приложении. Следы порождены дисплеем NonBlockingConsole.WriteLine правильно, однако. Сервер: AsyncAutoResetEvent Ааре = новый AsyncAutoResetEvent (ложь); общественного асинхронной Task TestfuncAsync () {строка strRet = "закончил"; NonBlockingConsole.WriteLine ( "перед AutoResetEvent"); ждут aare.WaitAsync (); NonBlockingConsole.WriteLine ( "после того, как AutoResetEvent"); // не прослеживается даже если asyncautoresetevent установлен обратный strRet; } Недействительный SetEvent () {aare.Set (); NonBlockingConsole.WriteLine (» CurrentThread.ManagedThreadId.ToString (); m_Queue.Add (значение); }}
eyesT
1

голосов
1

ответ
523

Просмотры

Сделайте Promise ждать Chrome.runtime.sendMessage

Я всегда видел Promise работать с SetTimeout, но я пытаюсь сделать его на основе независимо от chrome.runtime.sendMessage возвращается к Promise. У меня есть скрипт контента, который делает эту функцию после того, как сценарий был сделан. chrome.runtime.sendMessage ({завершения: истинно}); У меня есть фоновый скрипт, который перебирает каждый элемент массива и использует одно из его значений, чтобы открыть URL с chrome.tabs.update. То, что я пытаюсь сделать, это функцию асинхронной ждать сообщений сценария содержания представляемых и продолжает только со следующей итерацией, когда сообщение было получено, хотя я не знаю, как осуществить это, так как я только видел примеры с SetTimeout. Поэтому он должен открыть первый элемент в массиве и остановить выполнение скрипта содержимого на этой странице и сделать SendMessage в конце. Теперь фоновый скрипт должен ждать для SendMessage, чтобы получить перед переходом к следующему пункту. После того, как SendMessage было получено с OnMessage он должен перейти к следующему пункту и и повторите процедуру с шага 2 Это фоновый скрипт. chrome.storage.local.get ( 'userItems', функция (результат) {console.log (result.userItems); задержки функция () {// Я предполагаю, что я должен сделать что-то с OnMessage в функции задержки возврата нового Promise (Решимость => SetTimeout (решительность, 500));} функция асинхронной delayedLog (пункт) {ждут задержки (); console.log (пункт); уаг URL = "http://www.example.com/" + item.Category; chrome.tabs.update ({URL: URL});} функция асинхронной processArray (массив) {для (сопзИте элемент массива) {ждут delayedLog (пункт); }} processArray (result.userItems); });
Gulpy
1

голосов
1

ответ
909

Просмотры

Android (Котлин) - Как я жду асинхронная задача, чтобы закончить?

Я новичок в Android и Котлин и в настоящее время работает на централизованном класса API маршрутизатора. Для достижения этой цели я использую Framework топлива. Для функции doAsync я использую Анко для библиотеки Котлин. Чтобы получить токен авторизации из API я в настоящее время использую этот метод: частная весело Войти (имя пользователя: Строка, пароль: Строка, обратный вызов: (Карта) -> Unit) { «/auth/token.json» .httpPost () .header (mapOf ( "Content-Type" в "приложения / JSON")) .Body ( "" "{" имя пользователя ":" $ имя пользователя " "пароль": "$ пароль"} """, Charsets.UTF_8). ответ {запрос, ответ, результат -> request.headers.remove ( "Accept-Encoding" г. { "Идентификатор": "36e8fac0-487a-11e8-ad4e-c471feb11e42", "маркер": "d6897a230fd7739e601649bf5fd89ea4b93317f6", "истечение": "2018-04-27T17: 49: 48.721278Z"}. Вал JElement = JsonParser () разбора (it.getValue (истина)) Вэл jobject = jelement.asJsonObject // сохранить поле для класса областей видимости доступа Constants.token = jobject.get ( "маркера"). AsString Constants.id = jobject.get ( "ID"). AsString} еще {Toast.makeText (это @ LoginActivity, it.getValue (ложь), Toast.LENGTH_SHORT) .show ()}}} [30, TimeUnit.SECONDS] вар тест = Constants.id; } В отдельном классе Константы, хранить токен и идентификатор вроде этого: класс Константа {объект компаньона {Вэл BaseUrl: String = "BASE_URL_TO_MY_API" вал contentTypeJson = "приложение / JSON" lateinit вар STOREAGE_PATH: String // текущие пользовательские детали lateinit уага ID: Строка lateinit вар лексемы: String lateinit вара refresh_token: String // авторизовались в User lateinit пользователя вар: пользователь} Как я могу убедиться, что контрольная переменная устанавливается после того, как асинхронная задача выполняется? В настоящее время, я бегу в lateinit идентификатору собственности не был инициализирован я наткнулся на вариант, чтобы ограничить задачу тайм-аута, например, как я сделал с [30, TimeUnit.SECONDS], к сожалению, это не помогло. Спасибо за помощь! Приветствия. Вэл contentTypeJson = "приложение / JSON" lateinit вар STOREAGE_PATH: String // текущие пользовательские детали lateinit уага ID: Строка lateinit уага фишки: String lateinit вар refresh_token: String // авторизовался пользователь lateinit пользователя вара: User} Как убедиться в том, что переменная теста устанавливается после того, как асинхронная задача выполняется? В настоящее время, я бегу в lateinit идентификатору собственности не был инициализирован я наткнулся на вариант, чтобы ограничить задачу тайм-аута, например, как я сделал с [30, TimeUnit.SECONDS], к сожалению, это не помогло. Спасибо за помощь! Приветствия. Вэл contentTypeJson = "приложение / JSON" lateinit вар STOREAGE_PATH: String // текущие пользовательские детали lateinit уага ID: Строка lateinit уага фишки: String lateinit вар refresh_token: String // авторизовался пользователь lateinit пользователя вара: User} Как убедиться в том, что переменная теста устанавливается после того, как асинхронная задача выполняется? В настоящее время, я бегу в lateinit идентификатору собственности не был инициализирован я наткнулся на вариант, чтобы ограничить задачу тайм-аута, например, как я сделал с [30, TimeUnit.SECONDS], к сожалению, это не помогло. Спасибо за помощь! Приветствия. Строка lateinit вар refresh_token: String // вошедшего пользователя lateinit Пользователь вар: Пользователь} Как я могу убедиться, что контрольная переменная устанавливается после того, как асинхронная задача выполняется? В настоящее время, я бегу в lateinit идентификатору собственности не был инициализирован я наткнулся на вариант, чтобы ограничить задачу тайм-аута, например, как я сделал с [30, TimeUnit.SECONDS], к сожалению, это не помогло. Спасибо за помощь! Приветствия. Строка lateinit вар refresh_token: String // вошедшего пользователя lateinit Пользователь вар: Пользователь} Как я могу убедиться, что контрольная переменная устанавливается после того, как асинхронная задача выполняется? В настоящее время, я бегу в lateinit идентификатору собственности не был инициализирован я наткнулся на вариант, чтобы ограничить задачу тайм-аута, например, как я сделал с [30, TimeUnit.SECONDS], к сожалению, это не помогло. Спасибо за помощь! Приветствия.
alisheikh
1

голосов
1

ответ
270

Просмотры

Как использовать Vuex с асинхронным вычисленным сеттер собственности

У меня есть следующий компонент, где у меня есть тема вычислена свойство. Множество функции вычисленной собственности выполняет действие Vuex под названием setTheme, которая возвращает обещание, а также обновляет свойство темы в состоянии Vuex. Light Dark Vue импорт из "вю"; импорт {createNamespacedHelpers} из "vuex"; константный {mapActions} = createNamespacedHelpers ( "тема"); экспорта по умолчанию {вычислен: {Тема: {получить () {вернуть это $ store.state.theme.theme;. }, Установить (значение) {this.setTheme (значение); }}}, Методы: {... mapActions ([ "setTheme"])}}; Беда в том, что theme.get вычислен свойство не вызывается после setTheme завершения обновления радиокнопок с вновь выбранным элементом. Что это лучший способ обойти эту проблему при использовании асинхронных сеттеров. Это то, что выглядит мой Vuex как: экспорт Const состояние = {Тема: «свет»}; экспорт константные мутации = {Тема: (s, р) => (s.theme = р)}; экспорт константные действия: ActionTree = {асинхронная setTheme (контекст, тема) {context.commit ( "тема / тема", тема); // ... опущено ждут Timer.delay (750); // ...}} опущена; Const mainModule = {действия, добытчики, мутации, в пространстве имен: правда, состояние}; экспорта по умолчанию mainModule; константные модули = {другой: otherModule, тема: themeModule}; Const магазин = новый магазин ({модули,}); экспорт магазин по умолчанию; Тема = р)}; экспорт константные действия: ActionTree = {асинхронная setTheme (контекст, тема) {context.commit ( "тема / тема", тема); // ... опущено ждут Timer.delay (750); // ...}} опущена; Const mainModule = {действия, добытчики, мутации, в пространстве имен: правда, состояние}; экспорта по умолчанию mainModule; константные модули = {другой: otherModule, тема: themeModule}; Const магазин = новый магазин ({модули,}); экспорт магазин по умолчанию; Тема = р)}; экспорт константные действия: ActionTree = {асинхронная setTheme (контекст, тема) {context.commit ( "тема / тема", тема); // ... опущено ждут Timer.delay (750); // ...}} опущена; Const mainModule = {действия, добытчики, мутации, в пространстве имен: правда, состояние}; экспорта по умолчанию mainModule; константные модули = {другой: otherModule, тема: themeModule}; Const магазин = новый магазин ({модули,}); экспорт магазин по умолчанию; Const магазин = новый магазин ({модули,}); экспорт магазин по умолчанию; Const магазин = новый магазин ({модули,}); экспорт магазин по умолчанию;
Muhammad Rehan Saeed
1

голосов
2

ответ
686

Просмотры

Подождите несколько наблюдаемых в Угловой 5

Я новичок в Угловой и машинописи, поэтому вопрос может звучать неправильно. Я использую Visual Studio код и угловую 5 (нг-версию = "5.2.11"). Мне нужно «подождать» до моего вызова API закончится и вернуть это результат без упаковки все в гигантском «.subscribe». Что у меня есть: exampleMethod (): SettingsClass {сопз myComplexObject: SettingsClass = {field1: predefined.field1, field2: predefined.field2, field3: isComplexCalculationsNecessary? this.CallApi_1 (predefined.paramForField3): predefined.field3,}; вернуться myComplexObject; } Раньше у меня были все параметры в «предопределенный», но теперь мне нужно запросить одну (или более) из внешнего источника, и немедленно возвращает «myComplexObject» из метода (в какой-то другой апи вызова или другой компонент, или даже интерфейс, но Мне нужно этот объект полностью определен, со всеми параметрами устанавливается). Я мог бы превратить свой код «вверх-вниз» и поставить все внутри большой «.subscribe», но я dont't, потому что в какой-то момент я нужен другой параметр для запроса, а также, и все это будет ломаться. Как написать позвонить в апи, чтобы избежать перезаписи всех моих код каждый раз, когда мне нужно, чтобы добавить новый внешний вызов? Что-то вроде: CallApi_1 (paramForField3: строка): Наблюдаемое {вернуть this.http.get ( `$ {httpConfig.route} $ = применить фильтр $ {paramForField3} / $ {GroupBy httpConfig.groupingParam}`?); } Или, может быть CallApi_1 (paramForField3: строка): Наблюдаемое {вернуться this.ExternalCallsService.GetParam3Information (paramForField3) .subscribe (Рез => .GetParam3Information содержит тот же HTTP вызов, как указано выше, но мне нужно что-то сделать, чтобы вернуть этот результат на улице, я не знаю, что); } То, что я ищу некоторый король: field3: isComplexCalculationsNecessary? ** Await ** this.CallApi (predefined.paramForField3): predefined.field3, я в настоящее время пытаюсь «rxjs», которые имеют интересные варианты работы с наблюдаемыми характеристиками, как «forkJoin», но я не уверен, что я глядя в правильном направлении полностью, может быть, такой трюк невозможно, или мое понимание наблюдаемых не прав, и мне нужно, чтобы переместить сложную логику фонами? Пожалуйста, порекомендуйте. Важно отметить еще раз, что просто «.subscribe» не то, что я ищу, потому что во всех подписавшихся-примерах мы не возвращаются значения, но назначение его в некоторой глобальной переменной или непосредственно в HTML-элемент, и это не то, что я нужно, мне нужно, чтобы получить значение и продолжить работу с ней так быстро, как внешний ресурс будет вернуть его. paramForField3): predefined.field3, я в настоящее время пытаюсь «rxjs», которые имеют интересные варианты для работы с наблюдаемыми характеристиками, как «forkJoin», но я не уверен, что я смотрю в правильном направлении полностью, может быть такой трюк невозможно, или мое понимание наблюдаемого не право, и мне нужно, чтобы переместить сложную логику фонов? Пожалуйста, порекомендуйте. Важно отметить еще раз, что просто «.subscribe» не то, что я ищу, потому что во всех подписавшихся-примерах мы не возвращаются значения, но назначение его в некоторой глобальной переменной или непосредственно в HTML-элемент, и это не то, что я нужно, мне нужно, чтобы получить значение и продолжить работу с ней так быстро, как внешний ресурс будет вернуть его. paramForField3): predefined.field3, я в настоящее время пытаюсь «rxjs», которые имеют интересные варианты для работы с наблюдаемыми характеристиками, как «forkJoin», но я не уверен, что я смотрю в правильном направлении полностью, может быть такой трюк невозможно, или мое понимание наблюдаемого не право, и мне нужно, чтобы переместить сложную логику фонов? Пожалуйста, порекомендуйте. Важно отметить еще раз, что просто «.subscribe» не то, что я ищу, потому что во всех подписавшихся-примерах мы не возвращаются значения, но назначение его в некоторой глобальной переменной или непосредственно в HTML-элемент, и это не то, что я нужно, мне нужно, чтобы получить значение и продолжить работу с ней так быстро, как внешний ресурс будет вернуть его. как «forkJoin», но я не уверен, что я смотрю в правильном направлении полностью, может быть, такой трюк невозможно, или мое понимание наблюдаемого не прав, и мне нужен, чтобы переместить сложную логику фонов? Пожалуйста, порекомендуйте. Важно отметить еще раз, что просто «.subscribe» не то, что я ищу, потому что во всех подписавшихся-примерах мы не возвращаются значения, но назначение его в некоторой глобальной переменной или непосредственно в HTML-элемент, и это не то, что я нужно, мне нужно, чтобы получить значение и продолжить работу с ней так быстро, как внешний ресурс будет вернуть его. как «forkJoin», но я не уверен, что я смотрю в правильном направлении полностью, может быть, такой трюк невозможно, или мое понимание наблюдаемого не прав, и мне нужен, чтобы переместить сложную логику фонов? Пожалуйста, порекомендуйте. Важно отметить еще раз, что просто «.subscribe» не то, что я ищу, потому что во всех подписавшихся-примерах мы не возвращаются значения, но назначение его в некоторой глобальной переменной или непосредственно в HTML-элемент, и это не то, что я нужно, мне нужно, чтобы получить значение и продолжить работу с ней так быстро, как внешний ресурс будет вернуть его.
user3190541
1

голосов
0

ответ
60

Просмотры

ждут блоки запроса

У меня есть действие в моем контроллере, в котором есть вызов функции асинхронной общественный асинхронной задачи Подписка (AspNetUser пользователь, строка newUploadPath) {// сделать некоторые работы ждут DocServiceImpl.CopyUserAllModels (пользователь, newUploadPath); // сделать некоторые работы возвратного RedirectToAction ( "Список", "ClientDashboard"); } И эта функция будет загружать много файлов в Azure CDN поэтому она занимает слишком много времени. Проблема заключается в том, что клиент, который делает этот запрос должен ждать, пока функция CopyUserAllModels не заканчивается, потому что все это время ожидания клиент видит, что его страница перезагрузки в браузере. Я пытался не ждать вообще и использовали без поджидают DocServiceImpl.CopyUserAllModels (пользователь, newUploadPath); но я искал, что это плохой опыт, и, кроме этого, в этом случае я считаю, что какая-то часть файлов гавани» т был загружен на всех, поэтому без ждать не работает должным образом в моем случае (я не мог понять, почему). Моя проблема заключается в: Как закончить запрос ранее, а затем после того, как сделать всю работу в функции CopyUserAllModels?
Karen Avdalyan
1

голосов
0

ответ
119

Просмотры

Подождите, C # функции асинхронной, чтобы закончить выполнение в VBA?

Я разоблачил некоторые функции из моей C # VSTO ленты, и я могу назвать их с помощью кнопки VBA Excel. Одна из этих функций является асинхронной функции - ее операции размещаются на отдельном потоке, чтобы не блокировать Excel. Я хотел бы, что, когда я нажимаю его, кнопка отключена (не может быть нажата еще раз), пока функция асинхронной не будет завершена. Возможно ли это с помощью VBA, если да, то как? Вот реализация моего кода до сих пор: Sub myButton_Click () 'отключить эту кнопку' Dim надстройку Как AddIn Dim AutomationObject As Object Set надстройку = Application.AddIns ( "myAddIn") Set AutomationObject = addIn.Object automationObject.myAsyncFunc 'включить этот кнопка когда myAsyncFunc завершает выполнение»End Sub
Zeruno

Просмотр дополнительных вопросов