Questions tagged «asynchronous»

异步编程是一种用于延迟具有高延迟或低优先级的操作的策略,通常是为了提高软件的性能,响应能力和/或可组合性。通常使用事件驱动的编程和回调的某种组合来采用此类策略,并且可以选择通过协程和/或线程并发使用。


4
您可以在HTML脚本标签上同时使用async和defer属性吗?
我想同时使用defer和加载以下JavaScript代码async: <script defer async src="/js/somescript.js"></script> 由于deferInternet Explorer 5.5+支持此功能,如您在CanIUse.com上看到的那样,如果异步不可用,我想优雅地退回到使用defer。我认为最好使用异步,但要在Internet Explorer 10之前不支持它。 因此,我的问题是上述代码是否为有效的HTML?如果没有,是否有可能使用JavaScript来创建这种情况,而当无法使用JavaScript时,它会优雅地回退到defer在脚本上async使用?

6
异步Node.js模块导出
我想知道配置模块导出的最佳方法是什么。在下面的示例中,“ async.function”可以是FS或HTTP请求,为示例起见得到了简化: 这是示例代码(asynmodule.js): var foo = "bar" async.function(function(response) { foo = "foobar"; // module.exports = foo; // having the export here breaks the app: foo is always undefined. }); // having the export here results in working code, but without the variable being set. module.exports = foo; 如何仅在执行异步回调后导出模块? 编辑 有关我的实际用例的简短说明:我正在编写一个模块,用于在fs.exists()回调中配置nconf(https://github.com/flatiron/nconf)(即它将解析配置文件并设置nconf)。

7
如何等待C#中的事件?
我正在创建一个包含一系列事件的类,其中一个是GameShuttingDown。触发此事件后,我需要调用事件处理程序。该事件的目的是通知用户游戏正在关闭,他们需要保存其数据。可以等待保存,而不能等待事件。因此,当处理程序被调用时,游戏将在等待的处理程序完成之前关闭。 public event EventHandler<EventArgs> GameShuttingDown; public virtual async Task ShutdownGame() { await this.NotifyGameShuttingDown(); await this.SaveWorlds(); this.NotifyGameShutDown(); } private async Task SaveWorlds() { foreach (DefaultWorld world in this.Worlds) { await this.worldService.SaveWorld(world); } } protected virtual void NotifyGameShuttingDown() { var handler = this.GameShuttingDown; if (handler == null) { return; } handler(this, new …

2
将基于回调的异步方法转换为可等待任务的最佳方法
转换/包装使用回调的“经典”异步方法的最佳方法是什么,该方法返回一个(可等待的)任务? 例如,给定以下方法: public void GetStringFromUrl(string url, Action<string> onCompleted); 我知道将其包装到返回任务的方法中的唯一方法是: public Task<string> GetStringFromUrl(string url) { var t = new TaskCompletionSource<string>(); GetStringFromUrl(url, s => t.TrySetResult(s)); return t.Task; } 这是完成此任务的唯一方法吗? 并且有一种方法可以将对GetStringFromUrl(url,callback)的调用包装在任务本身中(即,调用本身将在任务内部运行而不是同步运行)

8
如何在Main中调用异步方法?
public class test { public async Task Go() { await PrintAnswerToLife(); Console.WriteLine("done"); } public async Task PrintAnswerToLife() { int answer = await GetAnswerToLife(); Console.WriteLine(answer); } public async Task<int> GetAnswerToLife() { await Task.Delay(5000); int answer = 21 * 2; return answer; } } 如果要在main()方法中调用Go,该怎么办?我正在尝试C#的新功能,我知道我可以将异步方法挂接到事件上,并通过触发该事件,可以调用异步方法。 但是,如果我想直接在main方法中调用该怎么办?我怎样才能做到这一点? 我做了类似的事情 class Program { static void …

6
这可能是什么?[TsLint错误:“必须正确处理承诺”]
我正在使用async/awaitTypeScript做一些基本的异步操作,但是TSLint在下面的这两个函数中抛出了神秘的错误消息。有人遇到过这些错误吗?在错误输出中未提及控制规则,因此我不明白是什么原因造成的。任何想法将不胜感激。 主要要求: import * as rp from 'request-promise' export function getRequest(address: rp.Options): rp.RequestPromise { return rp(address) } 导出异步功能: export async function getStatus(message: Message) { try { const res = await getRequest(address) if (res.ready) { message.reply('...') } else { message.reply('...') } } catch (err) { message.reply(err) } } 这得到:Promises must be …

10
fs.writeFile在一个许诺中,异步同步的东西
我的代码需要帮助。我是Node.js的新手,对此有很多麻烦。 我正在尝试做的是: 1)使用亚马逊产品(ASIN)获取.txt; 2)使用amazon-product-api软件包获取所有产品; 3)将每个产品保存在.json文件中。 我的代码无法正常工作。我想我把这些异步的东西弄乱了-救救我! var amazon = require('amazon-product-api'); var fs = require('fs'); var client = amazon.createClient({ awsId: "XXX", awsSecret: "XXX", awsTag: "888" }); var array = fs.readFileSync('./test.txt').toString().split('\n'); for (var i = 1; i < array.length; i++) { var ASIN = array[i]; return client.itemLookup({ domain: 'webservices.amazon.de', responseGroup: 'Large', idType: …

6
如何使一个异步方法返回一个值?
我知道如何制作异步方法,但是说我有一个方法需要大量工作,然后返回布尔值? 如何在回调中返回布尔值? 澄清: public bool Foo(){ Thread.Sleep(100000); // Do work return true; } 我希望能够使此异步。
76 c#  asynchronous 

8
何时在Node.js中关闭MongoDB数据库连接
通过Node MongoDB本机驱动程序使用Nodejs和MongoDB。需要检索一些文档,并进行修改,然后将其保存回来。这是一个例子: db.open(function (err, db) { db.collection('foo', function (err, collection) { var cursor = collection.find({}); cursor.each(function (err, doc) { if (doc != null) { doc.newkey = 'foo'; // Make some changes db.save(doc); // Update the document } else { db.close(); // Closing the connection } }); }); }); 具有异步性质,如果更新文档的过程花费更长的时间,则当光标到达文档末尾时,数据库连接将关闭。并非所有更新都保存到数据库中。 如果db.close()省略,则所有文档均正确更新,但应用程序挂起,永不退出。 …


4
从非异步代码调用异步方法
我正在更新具有.NET 3.5中内置的API表面的库。结果,所有方法都是同步的。我无法更改API(即,将返回值转换为Task),因为这将要求所有调用者都进行更改。因此,我剩下如何以同步方式最好地调用异步方法了。这是在ASP.NET 4,ASP.NET Core和.NET / .NET Core控制台应用程序的上下文中。 我可能还不够清楚-这种情况是我有不支持异步的现有代码,并且我想使用仅支持异步方法的新库,例如System.Net.Http和AWS开发工具包。因此,我需要弥合差距,并能够拥有可以被同步调用但可以在其他地方调用异步方法的代码。 我已经读了很多书,而且有很多次被问及回答了。 从非异步方法调用异步方法 同步等待异步操作,为什么Wait()在这里冻结程序 从同步方法中调用异步方法 如何同步运行异步Task <T>方法? 同步调用异步方法 如何在C#中从同步方法调用异步方法? 问题是大多数答案都不一样!我见过的最常见的方法是使用.Result,但这会导致死锁。我已经尝试了以下所有方法,并且它们都能正常工作,但是我不确定哪种方法可以避免死锁,具有良好的性能并且可以在运行时很好地发挥作用(在尊重任务调度程序,任务创建选项等方面) )。有明确的答案吗?最好的方法是什么? private static T taskSyncRunner<T>(Func<Task<T>> task) { T result; // approach 1 result = Task.Run(async () => await task()).ConfigureAwait(false).GetAwaiter().GetResult(); // approach 2 result = Task.Run(task).ConfigureAwait(false).GetAwaiter().GetResult(); // approach 3 result = task().ConfigureAwait(false).GetAwaiter().GetResult(); // approach …

4
使用C#在.NET 4.0中替代Task.Run的方法是什么?
我得到了这个程序,该程序给我语法错误“ System.Threading.Tasks.task不包含运行的定义”。 我正在使用VB 2010 .NET 4.0有什么想法?在.net 4.0中运行是否有替代品? using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ChatApp { class ChatProg { static void Main(string[] args) { Task<int> wakeUp = DoWorkAsync(2000,"Waking up"); Task.WaitAll(wakeUp); } static Task<int> DoWorkAsync(int milliseconds, string name) { //error appears below on word Run …

4
如何在不影响其他线程的情况下休眠node.js中的线程?
根据了解node.js事件循环,node.js支持单线程模型。这意味着,如果我对node.js服务器发出多个请求,它将不会为每个请求生成一个新线程,而是将一个接一个地执行每个请求。这意味着,如果我对node.js代码中的第一个请求执行以下操作,同时在节点上有一个新请求进入,则第二个请求必须等待直到第一个请求完成,包括5秒的睡眠时间。对? var sleep = require('sleep'); sleep.sleep(5)//sleep for 5 seconds 有没有一种方法,node.js可以为每个请求生成一个新线程,从而使第二个请求不必等待第一个请求完成,或者我只能在特定线程上调用sleep吗?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.