为什么 iText Sharper 库不公开任何异步方法?
我习惯于使用MethodNameAsync()库中的 APM 方法。这让我有点困惑,因为 iText 没有公开 APM 方法。这有什么原因吗?阅读和操作PDF不需要异步编程?
我将在 ASP.Net Core 控制器上使用 PDF 读取。为了获得性能和并行性,异步读取 PDF 不是至关重要吗?
假设我有一个函数,
function hello(){
console.log('hello world');
}
Run Code Online (Sandbox Code Playgroud)
现在我想在该函数完成后立即再次调用它。所以我做了这样的事情:
function hello(){
console.log('hello world');
hello();
}
Run Code Online (Sandbox Code Playgroud)
然而,这样做并不能按预期工作,因为由于nodejs的异步特性,在执行完成hello之前会再次调用。console.log('hello world');
有没有办法hello重复运行该函数,但等到它完成后再运行第二次?
正如标题所述,我很好奇是否可以从 转换Task<List<Derived>>为Task<List<BaseType>>?
我有几个返回 的方法Task<List<Derived>>,并且可以有多种类型的派生类。我想将所有任务存储在任务列表中:List<Task<List<BaseType>>>稍后执行。
如果我的任务不是包装列表,这将非常简单:链接
编辑1
这是我遇到问题的部分,我在将任务存储在列表中时遇到问题:
// This throws an error (cannot convert derived list to base list)
var tasks = new List<Task<List<BaseType>>>
{
asyncThing1(), // returns Task<List<Derived1>>
asyncThing2(), // returns Task<List<Derived2>>
// ... n number more
};
// Need the list of tasks before I can execute
List<BaseType>[] results = await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)
编辑2
以上,List<Base>[]改为List<BaseType>[]
我正在使用 Java。另一位软件开发人员向我提供了他的执行同步 HTTP 调用的代码并负责维护它 - 他正在使用com.google.api.client.http. 更新他的代码以使用带有回调的异步 HTTP 客户端不是一个可用的选项,我无法联系开发人员对其进行更改。但我仍然希望将回调附加到 HTTP 请求的高效异步行为。
(我在 Spring Boot 中工作,如果有任何影响,我的系统是使用 RabbitMQ AMQP 构建的。)
简单的 HTTP GET(它实际上是一个 API 调用)执行如下:
HttpResponse<String> response = httpClient.send(request, BodyHandlers.ofString());
Run Code Online (Sandbox Code Playgroud)
我通过 HTTP 与之通信的这个服务器需要一些时间来回复......比如说 3-4 秒。所以我的执行线程在这段时间内被阻塞,等待回复。这扩展性很差,我的单线程不做只是等待回复到达 - 这非常繁重。
当然,如果我想同时发送更多 HTTP 请求,我可以添加执行此调用的线程数,即我可以以这种方式进行扩展,但这听起来效率不高或不正确。如果可能的话,在这种情况下,我真的希望获得比 1 个线程等待 1 个 HTTP 请求更好的比率。
换句话说,我想用 2-3 个可用线程发送数千个 HTTP 请求,并在响应到达后进行处理;我不想在每个请求的执行之间产生任何明显的延迟。
我想知道:我怎样才能实现更具可扩展性的解决方案?如何处理每个线程的数千个 HTTP 调用?我应该看什么,还是我别无选择而我要求的是不可能的?
编辑:我想这是表达我的问题的另一种方式。假设我现在有 1000 个请求要发送,每个请求将持续 3-4 秒,但只有 4-5 个可用的执行线程可以发送它们。我想同时发送它们,但这是不可能的;如果我设法在 0.5 秒或更短的时间内将它们全部发送并通过一些回调或类似方式处理它们的请求,我会认为这是一个很好的解决方案。但我无法切换到异步 HTTP 客户端库。
我正在关注阿波罗教程(https://www.apollographql.com/docs/tutorial/resolvers/),我看到了这个代码:
me: async (_, __, { dataSources }) =>
dataSources.userAPI.findOrCreateUser()
Run Code Online (Sandbox Code Playgroud)
因为dataSources.userAPI.findOrCreateUser()返回Promise,我认为这await dataSources.userAPI.findOrCreateUser()是对的。
但是它运行得非常好,没有任何错误,我在 React 中得到了解决的价值……即使是下面的代码也运行得很好。
me: (_, __, { dataSources }) =>
dataSources.userAPI.findOrCreateUser()
Run Code Online (Sandbox Code Playgroud)
这段代码让我很困惑。它是如何工作的?
我搭建了一个像这样的 WebAPI 模板。
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
Task<List<ThingVm>> output = Context.Things
.Select(e => new ThingVm(e))
.ToListAsync();
return await output;
}
Run Code Online (Sandbox Code Playgroud)
我注意到返回的结果不会传达任何状态代码(因为我没有提供 200 或 404 等)。所以我添加了标准的、通常的Ok(...)调用。
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
...
return await Ok(output);
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,计算机并没有意识到该操作并像这样解释了错误。
CS1061“OkObjectResult”不包含“GetAwaiter”的定义,并且找不到接受“OkObjectResult”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用?)
我明白为什么会这样。我不知道如何在保留响应中发出的状态代码的同时解决它。
我在谷歌上搜索了它,但发现了一些非常陈旧的东西,完全不相关的东西和相当不相关的东西。就是这样 - 根本没有太多其他热门歌曲,这也令人惊讶。
如何发出状态代码并应用异步方法?它们不是相互排斥的,是吗?
c# asynchronous asp.net-web-api asp.net-core asp.net-core-2.2
我有两个要同时运行的函数,但我不能让它们单独运行,因为一个函数包含一个无限循环while(true)。JavaScript 的问题是,如果你在哪里运行两个函数,它会在运行下一个之前完成该函数的运行;所以如果我用while(true)循环运行一个函数,它永远不会移动到下一个函数。
如果你还不明白,这是我的代码:
function onOpen(){ // Google Apps Script trigger
infLoop() //how to run both of these functions at the same time?
runScript()
}
function infLoop(){ //inf loop.
while(True){
Utilities.sleep(100)
DocumentApp.getActiveDocument()
.setname("dont change this name")
}
}
function runScript(){
//code...
}
Run Code Online (Sandbox Code Playgroud) asynchronous function simultaneous infinite-loop google-apps-script
for 循环之后的代码在顶部的for 循环之前执行。Javascript是同步执行的,为什么先在for循环后执行?
function solution(A) {
let diff = [];
for (let i = 1; i < A.length; i++) {
let sum1 = 0;
let sum2 = 0;
for (let j = 0; j < i - 1; j++) {
sum1 += A[j];
console.log('Why this is executing later? ' + sum1);
}
for (let k = i; k < A.length; k++) {
sum2 += A[k];
}
console.log('Why this is executing frist? ' + sum1);
diff.push(Math.abs(sum1 - sum2)); …Run Code Online (Sandbox Code Playgroud)在 javascript 中,如果 array.push() 和 array.shift() 异步触发,数组会被破坏吗?
我正在使用一个数组来管理用户活动和在网页上花费的时间的跟踪。这些事件是异步创建的,并被推送到一个数组上。
数组像队列一样处理。array[0] 事件通过 HTTP POST 发送到主机数据库进行后期处理。成功时,数组被移动。
由于 array.push() 和 array.shift() 是异步调用的,这是否有可能破坏数组?
在按钮单击事件中说我有:
await someFn()
Run Code Online (Sandbox Code Playgroud)
在someFn代码中,我有一些同步代码和一些异步代码。
根据有关此主题的在线阅读,他们似乎都说await遇到时,控制立即返回调用者(在这种情况下为 UI 线程),同时发生异步等待。
我还没有遇到过解释async在等待函数中的代码之前有一些同步代码时会发生什么的情况。同步代码是否在将控件传递给调用者(UI 线程)之前执行?
我知道 - 如果它是使用await Task.Run(...)而不是运行await someFn(),它将在单独的线程中执行。
asynchronous ×10
async-await ×4
javascript ×4
c# ×3
node.js ×2
.net ×1
apollo ×1
arrays ×1
asp.net-core ×1
execution ×1
function ×1
generics ×1
http ×1
itext ×1
itext7 ×1
java ×1
push ×1
shift ×1
simultaneous ×1
spring ×1
synchronous ×1