标签: asynchronous

同步调用异步方法

我有一个async方法:

public async Task<string> GenerateCodeAsync()
{
    string code = await GenerateCodeService.GenerateCodeAsync();
    return code;
}
Run Code Online (Sandbox Code Playgroud)

我需要从同步方法中调用此方法.

如何在不必复制GenerateCodeAsync方法的情况下执行此操作以使其同步工作?

更新

然而找不到合理的解决方案

但是,我看到HttpClient已经实现了这种模式

using (HttpClient client = new HttpClient())
{
    // async
    HttpResponseMessage responseAsync = await client.GetAsync(url);

    // sync
    HttpResponseMessage responseSync = client.GetAsync(url).Result;
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net asynchronous task-parallel-library async-await

216
推荐指数
7
解决办法
21万
查看次数

如何在PHP中创建异步HTTP请求

PHP中有没有办法进行异步HTTP调用?我不关心响应,我只想做类似的事情file_get_contents(),但是在执行其余代码之前不要等待请求完成.这对于在我的应用程序中引发排序的"事件"或触发长进程非常有用.

有任何想法吗?

php asynchronous http

202
推荐指数
11
解决办法
16万
查看次数

我什么时候应该在ASP.NET MVC中使用异步控制器?

我有一些担心在ASP.NET MVC中使用异步操作.当它提高了我的应用程序的性能,并且在做它不是

  1. 在ASP.NET MVC中使用异步操作是否合适?
  2. 关于等待方法:当我想查询数据库时(通过EF/NHibernate /其他ORM),我应该使用async/await关键字吗?
  3. 我可以使用await关键字在一个动作方法中异步查询数据库多少次?

c# asp.net asynchronous async-await asp.net-mvc-4

202
推荐指数
6
解决办法
10万
查看次数

同步调用异步Javascript函数

首先,这是一个非常具体的例子,它将错误的方式用于将异步调用改造成一个非常同步的代码库,该代码库有数千行,而且时间目前还没有能力对"执行"进行更改对的." 它伤害了我生命中的每一根纤维,但现实和理想往往不会啮合.我知道这很糟糕.

好的,那个方法,我怎么做到这样我可以:

function doSomething() {

  var data;

  function callBack(d) {
    data = d;
  }

  myAsynchronousCall(param1, callBack);

  // block here and return data when the callback is finished
  return data;
}
Run Code Online (Sandbox Code Playgroud)

示例(或缺少)都使用库和/或编译器,这两者对于该解决方案都不可行.我需要一个如何使其阻塞的具体示例(例如,在调用回调之前不要离开doSomething函数)不要冻结UI.如果在JS中可以做到这样的话.

javascript asynchronous

198
推荐指数
7
解决办法
23万
查看次数

PHP中的异步shell exec

我有一个需要调用shell脚本的PHP脚本,但根本不关心输出.shell脚本会进行大量的SOAP调用,并且完成起来很慢,因此我不想在等待回复时减慢PHP请求的速度.实际上,PHP请求应该能够在不终止shell进程的情况下退出.

我已经研究过的各种exec(),shell_exec(),pcntl_fork(),等功能,但他们都不似乎提供正是我想要的.(或者,如果他们这样做,我不清楚如何.)有什么建议吗?

php shell asynchronous

195
推荐指数
9
解决办法
16万
查看次数

C#5异步CTP:为什么在EndAwait调用之前生成的代码中内部"state"设置为0?

昨天我正在讨论新的C#"异步"功能,特别是深入研究生成的代码的样子和the GetAwaiter()/ BeginAwait()/ EndAwait()调用.

我们在C#编译器生成的状态机中查看了一些细节,有两个方面我们无法理解:

  • 为什么生成的类包含一个永远不会被使用的Dispose()方法和$__disposing变量(并且该类没有实现IDisposable).
  • 为什么state在任何调用之前将内部变量设置为0 EndAwait(),当0通常表示"这是初始入口点"时.

我怀疑在异步方法中做一些更有趣的事情可以回答第一点,尽管如果有人有任何进一步的信息我会很高兴听到它.然而,这个问题更多的是关于第二点.

这是一段非常简单的示例代码:

using System.Threading.Tasks;

class Test
{
    static async Task<int> Sum(Task<int> t1, Task<int> t2)
    {
        return await t1 + await t2;
    }
}
Run Code Online (Sandbox Code Playgroud)

...这里是为MoveNext()实现状态机的方法生成的代码.这是直接从Reflector复制的 - 我没有修复不可言换的变量名:

public void MoveNext()
{
    try
    {
        this.$__doFinallyBodies = true;
        switch (this.<>1__state)
        {
            case 1:
                break;

            case 2:
                goto Label_00DA;

            case -1:
                return;

            default:
                this.<a1>t__$await2 = this.t1.GetAwaiter<int>();
                this.<>1__state = 1;
                this.$__doFinallyBodies = …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous c#-5.0

193
推荐指数
2
解决办法
7915
查看次数

哪些浏览器支持<script async ="async"/>?

2009年12月1日,Google宣布支持异步Google Analytics跟踪.

使用<script>标记的async指令实现异步跟踪.

哪些浏览器支持async指令(<script async="async" />)以及哪个版本?

html javascript performance asynchronous google-analytics

191
推荐指数
4
解决办法
13万
查看次数

如何使用Junit测试异步进程

如何测试使用Junit激发异步进程的方法?

我不知道如何让我的测试等待进程结束(它不是一个单元测试,它更像是一个集成测试,因为它涉及几个类而不仅仅是一个)

java junit unit-testing asynchronous

187
推荐指数
8
解决办法
14万
查看次数

同步和异步编程之间有什么区别(在node.js中)

我一直在阅读nodebeginner 而且我遇到了以下两段代码.

第一个:

    var result = database.query("SELECT * FROM hugetable");
    console.log("Hello World");
Run Code Online (Sandbox Code Playgroud)

第二个:

    database.query("SELECT * FROM hugetable", function(rows) {
       var result = rows;
    });
    console.log("Hello World");
Run Code Online (Sandbox Code Playgroud)

我得到了他们应该做的事情,他们查询数据库以检索查询的答案.然后console.log('Hello world').

第一个应该是同步代码.第二个是异步代码.

两件作品之间的区别对我来说非常模糊.输出会是什么?

谷歌搜索异步编程也没有帮助我.

javascript asynchronous synchronous node.js

181
推荐指数
6
解决办法
17万
查看次数

异步编程和多线程有什么区别?

我认为它们基本上是相同的 - 编写在处理器之间分割任务的程序(在具有2个以上处理器的机器上).然后我正在阅读https://msdn.microsoft.com/en-us/library/hh191443.aspx,其中说

异步方法旨在实现非阻塞操作.异步方法中的await表达式在等待的任务运行时不会阻止当前线程.相反,表达式将方法的其余部分作为延续进行注册,并将控制权返回给异步方法的调用者.

async和await关键字不会导致创建其他线程.异步方法不需要多线程,因为异步方法不能在自己的线程上运行.该方法在当前同步上下文上运行,并仅在方法处于活动状态时在线程上使用时间.您可以使用Task.Run将CPU绑定的工作移动到后台线程,但后台线程无助于正在等待结果可用的进程.

我想知道是否有人可以为我翻译成英文.它似乎区分了异步性(是一个单词?)和线程,并暗示你可以拥有一个具有异步任务但没有多线程的程序.

现在我理解异步任务的想法,例如pg上的示例.Jon Skeet的C#In Depth,第三版中的 467

async void DisplayWebsiteLength ( object sender, EventArgs e )
{
    label.Text = "Fetching ...";
    using ( HttpClient client = new HttpClient() )
    {
        Task<string> task = client.GetStringAsync("http://csharpindepth.com");
        string text = await task;
        label.Text = text.Length.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

async关键字的意思是" 这个功能,无论何时它被调用时,不会在这是需要的一切它的完成被称为它的呼叫后,上下文调用."

换句话说,将它写在某个任务的中间

int x = 5; 
DisplayWebsiteLength();
double y = Math.Pow((double)x,2000.0);
Run Code Online (Sandbox Code Playgroud)

,因为DisplayWebsiteLength()与"无关" xy将导致DisplayWebsiteLength()"在后台"执行,如

                processor 1                |      processor 2
-------------------------------------------------------------------
int …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading asynchronous async-await

180
推荐指数
2
解决办法
6万
查看次数