相关疑难解决方法(0)

TPL和async/await之间的区别(线程处理)

尝试理解TPL和async/ await在线程创建方面的区别.

我相信TPL(TaskFactory.StartNew)的工作方式类似于ThreadPool.QueueUserWorkItem它在线程池中的线程上排队工作.当然,除非您使用TaskCreationOptions.LongRunning哪个创建新线程.

我认为async/ await会以同样的方式工作:

TPL:

Factory.StartNew( () => DoSomeAsyncWork() )
.ContinueWith( 
    (antecedent) => {
        DoSomeWorkAfter(); 
    },TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

Async/ Await:

await DoSomeAsyncWork();  
DoSomeWorkAfter();
Run Code Online (Sandbox Code Playgroud)

会是相同的.从我一直在阅读它似乎async/ await只有"有时"创建一个新的线程.那么什么时候创建一个新线程,什么时候不创建一个新线程呢?如果您正在处理IO完成端口,我可以看到它不必创建新线程,但我认为它必须.我想我FromCurrentSynchronizationContext对此的理解总是有点模糊.我总是认为它本质上是UI线程.

multithreading task-parallel-library async-await c#-5.0

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

拥有一组一次只运行X的任务

假设我有100个任务需要10秒钟.现在我想一次只运行10个,就像10个中的1个完成另一个任务一样,直到完成所有任务.

现在我总是习惯于ThreadPool.QueueUserWorkItem()这样的任务,但我已经读到这样做是不好的做法,我应该使用任务.

我的问题是我没有找到适合我的方案的好例子,所以你能让我开始研究如何通过Tasks实现这个目标吗?

c# multithreading task

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

AsyncCTP:创建一个 IAwaitable 的类

我发现自己想要实现一个 IAwaitable 类(实现异步调用而不阻塞线程的东西)。

我已经安装了最新版本的 AsyncCTP,并且编译器说我需要一个 IsCompleted() 成员。好的,所以 CTP 预览已经移动了一点(我明白了,就像预览一样)

问题:AsyncCTP 语言扩展现在期待什么接口?

问题:在所有这些中,我假设我可以通过 lamda/delegate 向“IAwaitable”发出信号?这可能吗?我们叫 EndAwait 吗?智能感知建议您调用 EndAwait 来检索结果......所以这听起来不对。有任何想法吗?

到目前为止,我发现的所有示例都针对 AsyncCTP 库已经实现的功能,例如:

  await new WebClient().DownloadStringTaskAsync(uri).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

来自101 AsyncSamplesCS

背景:

我发现自己在 Jon Skeets 页面(再次)看着这个例子

using System;

class Test
{
    static async void Main()
    {
        await new Awaitable();
    }
}

class Awaitable
{
    public Awaiter GetAwaiter()
    {
        return new Awaiter();
    }
}

class Awaiter
{
    public bool BeginAwait(Action continuation)
    {
        return false;
    }

    public int EndAwait()
    {
        return 1; …
Run Code Online (Sandbox Code Playgroud)

c# android asynchronous async-await android-asynctask

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