标签: async-ctp

如何从getter或setter调用异步方法?

在C#中从getter或setter调用异步方法最优雅的方法是什么?

这里有一些伪代码可以帮助解释自己.

async Task<IEnumerable> MyAsyncMethod()
{
    return await DoSomethingAsync();
}

public IEnumerable MyList
{
    get
    {
         //call MyAsyncMethod() here
    }
}
Run Code Online (Sandbox Code Playgroud)

c# async-ctp

189
推荐指数
7
解决办法
10万
查看次数

在.net 4上使用async-await

我现在开始创建一个可以从C#5的async-await功能中获益的应用程序.但我不确定使用哪个版本的VS和async运行时.

看看操作系统受欢迎程度图表,我需要再支持Windows XP三年左右.看起来.net 4.5仅在较新版本的Windows上运行,因此我需要以.net 4.0为目标.开发机器使用Windows 7,因此使用较新版本的VS不是问题.

现在我需要先选择一个编译器来执行此操作:

  • 带有AsyncCTP的VS2010
  • VS2012预览(最后一次到达),将目标设置为.net 4.0
  • Mono(看起来像2.12有async-await,我更喜欢/习惯使用VS而不是MonoDevelop作为IDE)

哪一个代码生成错误较少?看看Jon Skeet的博客,VS2012 Preview使用的是永不代码生成器而不是CTP.

更重要的是使用哪个运行时?

VS2012是否包含可再发行的异步运行时与.net 4一起使用?

通过引用AsyncCTP运行时,我设法通过预览编译代码.但由于CTP具有奇怪的许可条件,这看起来不是一个好的长期解决方案.

或者我应该使用第三方实施?也许单声道有一个?

为了分发库,我更喜欢将dll放在与应用程序相同的目录中,而不是某种安装程序.

如果我的二进制文件在单声道+ Linux/MacOS上没有变化的情况下工作,我也会喜欢它.因此运行时应该与内置的任何单声道(可能是2.12)兼容,或者允许在非Windows操作系统上使用.

c# .net-4.0 async-await c#-5.0 async-ctp

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

返回void和返回任务有什么区别?

在查看各种C#异步CTP示例时,我看到一些返回的异步函数void,以及其他返回非泛型函数的异步函数Task.我可以看到为什么返回a Task<MyType>对于在异步操作完成时将数据返回给调用者很有用,但是我看到的返回类型的函数Task永远不会返回任何数据.为什么不回来void

c# asynchronous return-type task-parallel-library async-ctp

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

如何限制并发异步I/O操作的数量?

// let's say there is a list of 1000+ URLs
string[] urls = { "http://google.com", "http://yahoo.com", ... };

// now let's send HTTP requests to each of these URLs in parallel
urls.AsParallel().ForAll(async (url) => {
    var client = new HttpClient();
    var html = await client.GetStringAsync(url);
});
Run Code Online (Sandbox Code Playgroud)

这是问题所在,它会同时启动1000多个Web请求.有没有一种简单的方法来限制这些异步http请求的并发数量?这样在任何给定时间都不会下载超过20个网页.如何以最有效的方式做到这一点?

c# asynchronous task-parallel-library async-await async-ctp

103
推荐指数
5
解决办法
4万
查看次数

Async等待关键字等同于ContinueWith lambda吗?

请有人能够确认我是否正确理解了Async await关键字吗?(使用CTP的第3版)

到目前为止,我已经解决了在方法调用之前插入await关键字基本上做了两件事,A.它创建一个立即返回和B.它创建一个"延续",在完成异步方法调用时调用.在任何情况下,continuation都是该方法的代码块的其余部分.

所以我想知道的是,这两位代码在技术上是等价的,如果是这样,这基本上意味着await关键字与创建ContinueWith Lambda相同(即:它基本上是一个编译器快捷方式)?如果没有,有什么区别?

bool Success =
    await new POP3Connector(
        "mail.server.com", txtUsername.Text, txtPassword.Text).Connect();
// At this point the method will return and following code will
// only be invoked when the operation is complete(?)
MessageBox.Show(Success ? "Logged In" : "Wrong password");
Run Code Online (Sandbox Code Playgroud)

VS

(new POP3Connector(
    "mail.server.com", txtUsername.Text, txtPassword.Text ).Connect())
.ContinueWith((success) =>
    MessageBox.Show(success.Result ? "Logged In" : "Wrong password"));
Run Code Online (Sandbox Code Playgroud)

c# continuations async-await async-ctp

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

为什么要使用异步请求而不是使用更大的线程池?

在荷兰的Techdays期间,Steve Sanderson发表了关于C#5,ASP.NET MVC 4和异步Web的演讲.

他解释说,当请求需要很长时间才能完成时,线程池中的所有线程都会变忙,新请求必须等待.服务器无法处理负载,一切都变慢了.

然后,他展示了如何使用异步webrequests提高性能,因为然后将工作委托给另一个线程,并且线程池可以快速响应新的传入请求.他甚至演示了这一点,并显示50个并发请求首先占用了50*1,但异步行为总共只有1,2 s.

但看到这一点后,我仍然有一些问题.

  1. 为什么我们不能只使用更大的线程池?是不是使用async/await来启动另一个线程,然后从头开始增加线程池?它不像我们运行的服务器突然获得更多的线程或东西?

  2. 用户的请求仍在等待异步线程完成.如果池中的线程正在执行其他操作,那么"UI"线程如何保持忙碌状态?史蒂夫提到了一个关于'一个知道什么时候完成的智能内核'的东西.这是如何运作的?

c# asp.net asynchronous async-ctp

66
推荐指数
3
解决办法
1万
查看次数

无法等待异步lambda

想想这个,

Task task = new Task (async () =>{
    await TaskEx.Delay(1000);
});
task.Start();
task.Wait(); 
Run Code Online (Sandbox Code Playgroud)

调用task.Wait()不等待任务完成,下一行立即执行,但如果我将async lambda表达式包装到方法调用中,代码将按预期工作.

private static async Task AwaitableMethod()
{
    await TaskEx.Delay(1000);    
}
Run Code Online (Sandbox Code Playgroud)

然后(根据svick的评论更新)

await AwaitableMethod(); 
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library async-await async-ctp

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

Async Task.WhenAll with timeout

在新的异步dotnet 4.5库中是否有办法在Task.WhenAll方法上设置超时.我想获取几个源并在说5秒后停止并跳过未完成的源.

.net c# async-await async-ctp

56
推荐指数
3
解决办法
2万
查看次数

任务<>不包含'GetAwaiter'的定义

客户

iGame Channel = new ChannelFactory<iGame> ( new BasicHttpBinding ( BasicHttpSecurityMode . None ) , new EndpointAddress ( new Uri ( "http://localhost:58597/Game.svc" ) ) ) . CreateChannel ( );

public Task<SerializableDynamicObject> Client ( SerializableDynamicObject Packet )
{
    return Task<SerializableDynamicObject> . Factory . FromAsync ( Channel . BeginConnection , Channel . EndConnection , Packet , null );
}
Run Code Online (Sandbox Code Playgroud)

合同

    [OperationContract ( AsyncPattern = true )]
    IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State );

    SerializableDynamicObject EndConnection ( IAsyncResult …
Run Code Online (Sandbox Code Playgroud)

c# wcf silverlight-5.0 async-ctp

51
推荐指数
4
解决办法
11万
查看次数

为什么async关键字存在

浏览频道9 msdn视频我发现以下未答复的评论,希望有人可以解释一下吗?

我不明白async关键字.为什么不在方法返回Task时随时允许await关键字,就像迭代器可以在任何返回IEnumerable的方法上产生返回一样.

我确信有充分的理由,我只是想明白为什么上述建议是不可能的.

.net c# asynchronous async-ctp

39
推荐指数
3
解决办法
3227
查看次数