相关疑难解决方法(0)

C#异步 - 它是如何工作的?

微软今天(2010年10月28日)宣布推出Visual Studio Async CTP,它将asyncawait关键字引入C#/ VB以实现异步方法.

首先,我认为编译器将关键字转换为线程的创建,但根据白皮书和Anders Hejlsberg的PDC演示文稿(在31:00),异步操作完全在主线程上发生.

如何在同一个线程上并行执行操作?在技​​术上如何可能以及在IL中实际翻译的功能是什么?

.net c# vb.net asynchronous async-await

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

如何使用call/cc实现c#5.0中的新异步功能?

我一直在关注asyncc#5.0中新功能的新公告.我对继续传递样式以及新的c#编译器对Eric Lippert的帖子中的代码片段所做的转换有基本的了解:

async void ArchiveDocuments(List<Url> urls)
{
  Task archive = null;
  for(int i = 0; i < urls.Count; ++i)
  {
    var document = await FetchAsync(urls[i]);
    if (archive != null)
      await archive;
    archive = ArchiveAsync(document);
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道有些语言通过call-with-current-continuation(callcc)本地实现continuation ,但我真的不明白它是如何工作的或它究竟是做什么的.

所以这就是问题:如果安德斯等人.已经决定咬紧牙关,只是callcc在c#5.0而不是async/ await特殊情况下实现,上面的代码片段会是什么样子?

c# asynchronous callcc continuation-passing async-await

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

为什么在Task <T> monad中不包含CancellationToken?

Task<T>整齐持有"已经开始,可能会完成"计算,可与其它任务,与功能等.相比之下映射组成,F#的async单子持有"以后可以开始,可能现在正在运行"的计算,连同一个CancellationToken.在C#中,您通常必须CancellationToken遍历每个使用a的函数Task.为什么C#团队选择将计算包装在Taskmonad中,但不是CancellationToken

c# monads f# task-parallel-library async-await

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