Questions tagged «task»

任务是用于并发工作的抽象,它可以表示应与程序其余部分同时执行的操作。任务是Ada中执行的并发线程,代表.NET中的异步操作,它也对应于Java中的线程。

5
我是否应该担心“此异步方法缺少'await'运算符,并且将同步运行”警告
我有一个暴露一些异步方法的接口。更具体地说,它具有定义的返回Task或Task <T>的方法。我正在使用async / await关键字。 我正在实现此接口。但是,在其中某些方法中,此实现没有任何等待。因此,我收到编译器警告“此异步方法缺少'await'运算符,将同步运行...” 我知道为什么会收到错误,但想知道在这种情况下是否应该对它们采取任何措施。忽略编译器警告是错误的。 我知道我可以通过等待Task.Run来修复它,但是对于仅执行一些廉价操作的方法来说,这是错误的。听起来也好像会给执行增加不必要的开销,但是由于不确定async关键字,因此我也不确定是否已经存在。 我应该只是忽略警告,还是有办法解决我所没有看到的问题?

4
JavaFX中的Platform.runLater和Task
我一直在对此进行一些研究,但至少可以说我还是很困惑。 谁能给我一个何时使用Task以及何时使用的具体示例Platform.runLater(Runnable);?到底有什么区别?何时使用这些方法是否有黄金法则? 如果我错了,也可以纠正我,但是这两个“对象”不是在GUI主线程内(用于更新GUI)创建另一个线程的方法吗?

7
Task.Run是否有参数?
我正在从事一个多任务网络项目,并且是的新手Threading.Tasks。我实现了一个简单的方法Task.Factory.StartNew(),不知道该如何处理Task.Run()? 这是基本代码: Task.Factory.StartNew(new Action<object>( (x) => { // Do something with 'x' }), rawData); 我System.Threading.Tasks.Task在对象浏览器中进行了调查,但找不到Action<T>相似的参数。只有Action这需要void参数,没有类型。 只有两件事是相似的:static Task Run(Action action)并且static Task Run(Func<Task> function)不能同时发布参数。 是的,我知道我可以创建一个简单的扩展方法,但我的主要问题是,我们可以把它写在一行用Task.Run()?

7
在Rails中播种数据库的最佳方法是什么?
我有一个rake任务,可在Rails应用程序中填充一些初始数据。例如,国家,州,移动运营商等。 我现在设置的方式是,我在/ db / fixtures中的文件中有一堆create语句和一个处理它们的rake任务。例如,主题是我拥有的一个模型。我在/ db / fixtures中有一个theme.rb文件,看起来像这样: Theme.delete_all Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222', :component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000', :join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF', :cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true) Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF', :component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF', :join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000', :cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true) Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', …

6
如何防止任务上的同步继续?
我有一些库(套接字网络)代码,Task基于提供了一个基于API的未决请求响应TaskCompletionSource<T>。但是,TPL中有一个烦人之处在于,似乎不可能阻止同步继续。我会希望能够做的是两种: 告诉TaskCompletionSource<T>不允许呼叫者附加TaskContinuationOptions.ExecuteSynchronously,或者 设置结果(SetResult/ TrySetResult)的方式指定TaskContinuationOptions.ExecuteSynchronously应忽略的结果,而是使用池 具体来说,我的问题是传入的数据正在由专用的读取器处理,并且如果呼叫者可以附加TaskContinuationOptions.ExecuteSynchronously它们,则它们可能会使读取器停止运行(这不仅会影响读取器)。以前,我是通过一些黑客来解决此问题的,该黑客可以检测是否存在任何继续,如果将其继续,则将完成推送到上ThreadPool,但是如果调用者饱和了他们的工作队列,这将产生重大影响,因为不会处理完成及时地。如果他们正在使用Task.Wait()(或类似方法),则它们实际上将使自己陷入僵局。同样,这就是为什么阅读器使用专用线程而不使用工人的原因。 所以; 在尝试拖累TPL团队之前:我是否缺少选择? 关键点: 我不希望外部呼叫者能够劫持我的线程 我不能将ThreadPool用作实现,因为它在池饱和时需要工作 下面的示例产生输出(顺序可能会随时间而变化): Continuation on: Main thread Press [return] Continuation on: Thread pool 问题在于,一个随机调用者设法在“主线程”上获得了延续。在实际代码中,这会打断主要读者。坏事! 码: using System; using System.Threading; using System.Threading.Tasks; static class Program { static void Identify() { var thread = Thread.CurrentThread; string name = thread.IsThreadPoolThread ? "Thread pool" : thread.Name; …

8
如何在Main中调用异步方法?
public class test { public async Task Go() { await PrintAnswerToLife(); Console.WriteLine("done"); } public async Task PrintAnswerToLife() { int answer = await GetAnswerToLife(); Console.WriteLine(answer); } public async Task<int> GetAnswerToLife() { await Task.Delay(5000); int answer = 21 * 2; return answer; } } 如果要在main()方法中调用Go,该怎么办?我正在尝试C#的新功能,我知道我可以将异步方法挂接到事件上,并通过触发该事件,可以调用异步方法。 但是,如果我想直接在main方法中调用该怎么办?我怎样才能做到这一点? 我做了类似的事情 class Program { static void …


2
如何使用python的asyncio模块正确创建和运行并发任务?
我正在尝试Task使用Python 3的相对较新的asyncio模块正确理解和实现两个同时运行的对象。 简而言之,asyncio似乎旨在处理Task事件循环中的异步过程和并发执行。它促进了await(应用于异步函数中)作为无回调方式等待和使用结果的使用,而不会阻塞事件循环。(期货和回调仍然是可行的选择。) 它还提供了asyncio.Task()该类,该类是Future 设计用于包装协程的专门子类。最好通过使用该asyncio.ensure_future()方法来调用。异步任务的预期用途是允许独立运行的任务与同一事件循环中的其他任务“同时”运行。我的理解是Tasks连接到事件循环,然后该循环自动继续驱动await语句之间的协程。 我喜欢无需使用任何一个Executor类就可以使用并发Task的想法,但是在实现方面我没有发现太多细节。 这是我目前正在做的事情: import asyncio print('running async test') async def say_boo(): i = 0 while True: await asyncio.sleep(0) print('...boo {0}'.format(i)) i += 1 async def say_baa(): i = 0 while True: await asyncio.sleep(0) print('...baa {0}'.format(i)) i += 1 # wrap in Task object # -> automatically …

4
是否可以保证Task.Factory.StartNew()使用调用线程以外的其他线程?
我正在从一个函数启动一个新任务,但我不希望它在同一线程上运行。我不在乎它在哪个线程上运行,只要它在另一个线程上即可(因此在此问题中无济于事)。 我是否保证下面的代码TestLock在Task t再次允许输入之前总是退出?如果不是,为防止重入,推荐的设计模式是什么? object TestLock = new object(); public void Test(bool stop = false) { Task t; lock (this.TestLock) { if (stop) return; t = Task.Factory.StartNew(() => { this.Test(stop: true); }); } t.Wait(); } 编辑:根据乔恩·斯凯特(Jon Skeet)和史蒂芬·图布(Stephen Toub)的以下回答,一种确定性地防止重入的简单方法是传递CancellationToken,如以下扩展方法所示: public static Task StartNewOnDifferentThread(this TaskFactory taskFactory, Action action) { return taskFactory.StartNew(action: action, cancellationToken: …

6
C#中的Promise等效项
在Scala中,有一个Promise类可用于手动完成Future。我正在寻找C#中的替代方法。 我正在编写一个测试,并且希望它看起来像这样: // var MyResult has a field `Header` var promise = new Promise<MyResult>; handlerMyEventsWithHandler( msg => promise.Complete(msg); ); // Wait for 2 seconds var myResult = promise.Future.Await(2000); Assert.Equals("my header", myResult.Header); 我知道这可能不是C#的正确模式,但是即使模式有所不同,我也无法找出实现相同目标的合理方法。 编辑:请注意,async/await在这里没有帮助,因为我没有等待的任务!我只有访问将在另一个线程上运行的处理程序的权限。


3
如何声明一个未启动的任务,将等待另一个任务?
我已经完成了此单元测试,但我不明白为什么“ await Task.Delay()”不等待! [TestMethod] public async Task SimpleTest() { bool isOK = false; Task myTask = new Task(async () => { Console.WriteLine("Task.BeforeDelay"); await Task.Delay(1000); Console.WriteLine("Task.AfterDelay"); isOK = true; Console.WriteLine("Task.Ended"); }); Console.WriteLine("Main.BeforeStart"); myTask.Start(); Console.WriteLine("Main.AfterStart"); await myTask; Console.WriteLine("Main.AfterAwait"); Assert.IsTrue(isOK, "OK"); } 这是单元测试的输出: 这怎么可能是“等待”不等待,而主线程继续呢?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.