小编Rus*_*fin的帖子

ApiController的异步方法 - 有什么好处?什么时候用?

(这可能与ASP.NET MVC4异步控制器问题重复- 为什么要使用?,但关于webapi,我不同意那里的答案)

假设我有一个长时间运行的SQL请求.它的数据应序列化为JSON并发送到浏览器(作为xhr请求的响应).示例代码:

public class DataController : ApiController
{
    public Task<Data> Get()
    {
        return LoadDataAsync(); // Load data asynchronously?
    }
}
Run Code Online (Sandbox Code Playgroud)

当我执行$ .getJson('api/data',...)时会发生什么(请参阅此海报http://www.asp.net/posters/web-api/ASP.NET-Web-API-Poster. pdf):

  1. [IIS] IIS接受请求.
  2. [IIS] IIS等待来自托管池的一个线程[THREAD](http://msdn.microsoft.com/en-us/library/0ka9477y ( v=vs.110 ) .aspx)并开始工作.
  3. [THREAD] Webapi在该线程和其他类中创建新的DataController对象.
  4. [THREAD]使用任务并行lib在[THREAD2]中启动sql-query
  5. [THREAD]返回托管池,准备进行其他处理
  6. [THREAD2]与sql驱动程序一起工作,准备好读取数据并调用[THREAD3]来回复xhr请求
  7. [THREAD3]发送响应.

如果出现问题,请随时纠正我.

在上面的问题中,他们说,点和利润是,[THREAD2]不是来自托管池,但MSDN文章(上面的链接)说

默认情况下,并行库类型类似TaskTask<TResult>使用线程池线程来运行任务.

所以我得出结论,所有三个线程都来自托管池.

此外,如果我使用同步方法,我仍然只使用一个线程(来自宝贵的线程池)保持我的服务器响应.

那么,从1个线程交换到3个线程的实际意义是什么?为什么不在线程池中最大化线程?

有没有明显有用的方法来使用异步控制器?

task-parallel-library asynccontroller async-await asp.net-web-api

25
推荐指数
1
解决办法
2万
查看次数

如何修复不可靠的 WebRTC 调用?

WebRTC 调用在我们的应用程序中不可靠。有时我们会看到黑屏,有时我们根本看不到通话开始,有时会看到音频/视频中的巨大延迟或不同步。

设置:

几乎100% 重现的问题是从 LTE 上的一个客户端调用 Wi-Fi 上的另一个客户端。在这种情况下,我们在两个设备上都看到黑屏,但是,默认的 bg-color 是白色,所以至少在 WebRTC 端发生了一些事情。

为解决问题做了哪些工作:

  • 检查 Coturn 日志......有时我们会在那里看到“未经授权”的错误,但很难说它们是否会影响任何事情;
  • 查看了Coturn的流量:在Wi-Fi到Wi-Fi的场景下流量很低,所以点对点连接是真的。如果有 LTE,我们会看到大约 40-120KiB/sec 的负载(对于音频/视频来说这不是太低了吗?),所以 TURN 似乎可以工作;
  • 检查客户端应用程序日志,没什么特别的;

请提出任何可能的研究或修复方法,以使 WebRTC 尽可能可靠。

webrtc cordova simplewebrtc signalmaster coturn

5
推荐指数
1
解决办法
1519
查看次数

等待在GUI中显示多个任务

假设我有两个资源AB,这两者我想告诉我的用户,通过MVVM(此==视图模型)

this.A = GetA();
this.B = GetB();
Run Code Online (Sandbox Code Playgroud)

我一开始使用TPL:

this.A = await GetAAsync();
this.B = await GetBAsync();
Run Code Online (Sandbox Code Playgroud)

这开始得到A.什么时候A准备就绪,它显示A并继续做同样的事情B- 不是一个非常好的解决方案.会更好:

var taskA = GetAAsync();
var taskB = GetBAsync();
this.A = await taskA;
this.B = await taskB;
Run Code Online (Sandbox Code Playgroud)

现在,这开始得到A,开始得到B并等待A.当A准备好了,就说明A和等待B,直到它显示了.看起来不错,但是,如果A有时需要花费更多的时间来加载,那该B怎么办?

我该如何实现以下场景:

  • 开始加载A.
  • 开始加载B.
  • 当其中一个准备就绪时,请展示它.
  • 当另一个准备就绪时,也要显示它.

.net c# silverlight task-parallel-library async-await

2
推荐指数
1
解决办法
171
查看次数

从代码(c#)部署Azure功能

如何将代码为字符串(在c#中)的azure函数(按计划执行)部署到给定的azure函数应用程序?

我将使用ARM模板部署azure fund app(+所有它需要的)https://github.com/Azure/azure-quickstart-templates/tree/master/101-function-app-create-dynamic,它可以通过代码部署;

但我没有看到通过代码部署函数来运行app的方法.

+更多上下文:部署将从应用服务发生,因此除了NuGet之外,最好不要有任何依赖.例如,我不喜欢从c#调用azure cli的想法.

c# azure azure-rm-template azure-functions

1
推荐指数
1
解决办法
1255
查看次数