标签: task

何时使用TaskCreationOptions.LongRunning?

我很想知道这一点,但从未真正找到答案.

我知道这是任务调度程序的一个提示,任务调度程序将在其中运行,并且任务调度程序可以(或现在将?)决定为该任务实例化非线程池线程.

我不知道(并且令人惊讶地在互联网上找不到)是一个"经验法则"何时指定一个长期运行的任务.是一秒多长?30秒?一分钟?5分钟?它是否与应用程序使用的任务量有关系?作为程序员,我应该使用线程池中的#threads进行一些计算,我创建了多少个任务,同时长时间运行了多少个任务,并根据这个来决定是否使用长时间运行的任务?

希望在这里学点东西.

c# multithreading task task-parallel-library

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

如何在Ant中覆盖属性?

有没有办法重新分配Ant property任务的值?或者还有其他任务可用于此目的吗?

ant properties task

29
推荐指数
5
解决办法
6万
查看次数

CancellationToken UnRegister Action

我有各种任务的令牌,我需要更好地管理他们的取消,以获得我可以使用的取消通知:

token.Register(RegisterMethod);
Run Code Online (Sandbox Code Playgroud)

如何删除此"订阅"?有没有办法"UnRegister"?

我想过用TaskCompletionSource做一个解决方法.但我不知道它是否会运作良好.解决这种方法的最佳方法是什么?

c# task async-await async-ctp cancellation-token

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

多线程HttpListener,等待异步和任务

这是一个多线程的可扩展HttpListener的一个很好的例子吗?

这是一个真正的IIS会这样做吗?

public class Program
{
    private static readonly HttpListener Listener = new HttpListener();

    public static void Main()
    {
        Listener.Prefixes.Add("http://+:80/");
        Listener.Start();
        Listen();
        Console.WriteLine("Listening...");
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }

    private static async void Listen()
    {
        while (true)
        {
            var context = await Listener.GetContextAsync();
            Console.WriteLine("Client connected");
            Task.Factory.StartNew(() => ProcessRequest(context));
        }

        Listener.Close();
    }

    private static void ProcessRequest(HttpListenerContext context)
    {
        System.Threading.Thread.Sleep(10*1000);
        Console.WriteLine("Response");
    }
}
Run Code Online (Sandbox Code Playgroud)

我特意寻找一种不依赖于IIS的可扩展解决方案.而只是在http.sys(这是httplistener类) - 不依赖于iIS的原因是因为政府.我工作的区域需要极大减少的攻击面积.

c# task async-await

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

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

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

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

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

c# multithreading task

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

Task.WaitAll方法与Parallel.Invoke方法

我有示例代码来比较Parallel方法和Task方法的处理时间.这个实验的目标是了解它们是如何工作的.

所以我的问题是:

  1. 为什么Parallel工作得比Task快?
  2. 我的结果是否意味着我应该使用Parallel而不是Task?
  3. 我应该在哪里使用Task和Parallel?
  4. 使用Task与Parallel相比有什么好处?
  5. Task只是ThreadPool.QueueUserWorkItem方法的包装吗?

        public Task SomeLongOperation()
        {
            return Task.Delay(3000);
        }
    
        static void Main(string[] args)
        {
            Program p = new Program();
            List<Task> tasks = new List<Task>();
    
            tasks.Add(Task.Factory.StartNew(() => p.SomeLongOperation()));
            tasks.Add(Task.Factory.StartNew(() => p.SomeLongOperation()));
    
            var arr = tasks.ToArray();
    
            Stopwatch sw = Stopwatch.StartNew();
            Task.WaitAll(arr);
            Console.WriteLine("Task wait all results: " + sw.Elapsed);
            sw.Stop();
    
            sw = Stopwatch.StartNew();
            Parallel.Invoke(() => p.SomeLongOperation(), () => p.SomeLongOperation());
            Console.WriteLine("Parallel invoke results: " + sw.Elapsed);
            sw.Stop();
    
            Console.ReadKey();
        }
    
    Run Code Online (Sandbox Code Playgroud)

这是我的处理结果: 结果

编辑:

将代码更改为如下所示:

    Program p = new Program();
    Task[] tasks …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing task

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

.NET 4.6的Task.CompletedTask有什么意义?

这篇博文提到了新的Task API,包括.NET 4.6中引入的一个新的Task.CompletedTask属性.

为什么要添加?比起比这更好的是什么Task.FromResult(whatever)

c# task .net-4.6

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

C#任务什么时候开始?

任务什么时候开始?

public void DoSomething() {
    Task myTask = DoSomethingAsync();

    Task.WaitAll(new[] { myTask }, 2000);
}

public async Task DoSomethingAsync() {
    await SomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

它是在初始化时立即Task myTask = DoSomethingAsync();启动还是在您说等待时启动Task.WaitAll(new[] { myTask }, 2000);

c# asynchronous task async-await

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

Google App Engine任务队列如何运作?

我对使用队列的任务执行感到困惑.我已经阅读了文档,我认为我理解了bucket_size和rate,但是当我将20个任务发送到设置为5/h,大小为5的队列时,所有20个任务尽可能快地执行,最后完成1分钟.

deferred.defer(spam.cookEggs, 
               egg_keys, 
               _queue="tortoise")  

- name: tortoise
  rate: 5/h  
  bucket_size: 5  
Run Code Online (Sandbox Code Playgroud)

我想要的是我是创建10个还是100个任务,我只想要每小时运行5个任务.所以完成需要大约4个小时的20个任务.我希望他们的执行分散开来.

UPDATE

问题是我假设在本地运行时遵循了任务执行率规则,但事实并非如此.您无法在本地测试执行率.当我部署到生产时,我设置的速率和桶大小按我的预期执行.

python queue google-app-engine task

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

为什么电话不明确?'Task.Run(Action)'和'Task.Run(Func <Task>)'

考虑以下代码:

public void CacheData()
{
    Task.Run((Action)CacheExternalData);
    Task.Run(() => CacheExternalData());

    Task.Run(CacheExternalDataTask);

    Task.Run(CacheExternalData);
}

public Task CacheExternalDataTask()
{
    // Long running code
    return Task.FromResult("Data");
}

public void CacheExternalData()
{
    // Long running code
}
Run Code Online (Sandbox Code Playgroud)

为什么Task.Run(CacheExternalData) 模棱两可?而且Task.Run(CacheExternalDataTask)不是

当我打电话时Task.Run,CacheExternalData我会认为编译器很清楚该方法没有返回a Task并且应该解析为Action

c# task

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