Tag: 任务

没有冻结替代Thread.Sleep等待在任务内部

我必须调用一个如下工作的Web API: 上传一首歌 请求对该歌曲进行特定分析 等待该过程完成 检索并返回结果 我遇到了问题。 3,我尝试过Thread.Sleep但冻结了UI。 如何在不冻结UI的情况下等待任务? public override async Task Execute(Progress progress, string id) { FileResponse upload = await Queries.FileUpload(id, FileName, progress); upload.ThrowIfUnsucessful(); FileResponse analyze = await Queries.AnalyzeTempo(id, upload); analyze.ThrowIfUnsucessful(); FileResponse status; do { status = await Queries.FileStatus(id, analyze); status.ThrowIfUnsucessful(); Thread.Sleep(TimeSpan.FromSeconds(10)); } while (status.File.Status != “ready”); AnalyzeTempoResponse response = await Queries.FileDownload(id, status); […]

任务状态:等待激活-DownloadStringTaskAsync -WP8

任务的状态始终是“等待激活”。任务的结果=“”。 我不明白为什么…感谢您的帮助UI调用GetDocLibs方法。 public class ServerFunctions { public static List GetDocLibs(bool onlyDocLibPerso) { string xmlContent = GetXml(); List result = BdeskDocLib.GetListFromXml(xmlContent, onlyDocLibPerso); return result; } private static String GetXml() { Tasktask=requesteur.Query(dataRequestParam); task.Wait(); xmlResult = task.Result; return xmlResult; } } public class DataRequest { public Task Query(DataRequestParam dataRequestParam) { try { WebClient web = new WebClient(); if […]

如何在Java Android Studio中的新线程上启动进程? (要求相当于C#代码)

我在C#代码上使用此例程来启动/停止/重新启动另一个线程上的某个函数: using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { var CancelationToken = new CancellationTokenSource(); // declare and initialize a token for the cancelaion while (something) { if (Whatever) { CancelationToken = new CancellationTokenSource(); // re initialize if wanted to restart Task.Run(() = > Process(), CancelationToken.Token); //start a method […]

为什么C#Parallel.Invoke很慢?

我这样做: private static void Main(string[] args) { var dict1 = new Dictionary(); var dict2 = new Dictionary(); DateTime t1 = DateTime.Now; for (int i = 1; i dict1.Add(i, “Test” + i), () => dict2.Add(i, “Test” + i) ); } TimeSpan t2 = DateTime.Now.Subtract(t1); Console.WriteLine(t2.TotalMilliseconds); Console.ReadLine(); } 所以做一个100万次循环并将项目添加到两个不同的词典。 问题是需要11秒,这比普通顺序方法(没有任务/线程)多5倍,仅需2秒。 不知道为什么。

Task.WhenAll是否在后台线程并行运行任务

以下2个代码片段是否相同? //————————————————– 1. //————————————————– var producer = Task.Run(async () => { await bar.ReadDataAsync(); }); var consumer = Task.Run(async () => { await bar.WriteDataAsync(); }); await Task.WhenAll(consumer, producer); //————————————————– 2. //————————————————– await Task.WhenAll(bar.ReadDataAsync(), bar.WriteDataAsync());

为什么TaskFactory.StartNew收到CancellationToken

可能重复: 任务构造函数中的取消令牌:为什么? 此方法接收CancellationToken: CancellationTokenSource cts = new CancellationTokenSource(4); var t = Task.Factory.StartNew(() => { // code }, cts.Token); 由于取消是合作的(实际工作代码需要观察取消令牌),将此作为参数传递给StartNew方法的目的是什么?

为什么等待不等?

这是我的实际代码: async Task getData() { Thread.Sleep(5000); Console.WriteLine(“Step 1”); using (HttpClient api = new HttpClient()) await api.GetAsync(“http://google.com/”).ContinueWith( (getTask) => Console.WriteLine(getTask.Result.StatusCode); ); Console.WriteLine(“Step 2”); } private void button1_Click(object sender, EventArgs e) { Task task = new Task(getData); task.Start(); task.Wait(); Console.WriteLine(“Step 3”); } 我得到以下输出: Step 1 Step 3 OK Step 2 为什么Step 3不会在Step 2 Step 3之后出现? 如何让它按顺序工作,即只返回getData的调用者,直到getData中的所有内容都完成为止?

从UI调度任务的问题。继续任务

我的应用程序使用以下代码安排长时间运行的任务: Task.Factory.StartNew((a) => WorkTask1(), TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent) .ContinueWith(antecedent => WorkCompletedTask1(antecedent.Result), TaskScheduler.FromCurrentSynchronizationContext()); 计划WorkCompletedTask1并按预期在UI上显示结果。 根据WorkTask1的结果,WorkCompletedTask1可以使用以下语句安排其他任务: Task.Factory.StartNew((a) => WorkTask2(), TaskCreationOptions.LongRunning | TaskCreationOptions.AttachedToParent) .ContinueWith(antecedent => WorkCompletedTask2(antecedent.Result), TaskScheduler.FromCurrentSynchronizationContext()); WorkTask2不会按预期在单独的线程上运行; 它在UI线程上运行,该线程被阻塞直到WorkTask2完成。 我以为TaskCreationOptions.LongRunning会保证一个单独的线程。 为什么这不起作用的任何建议? 我可以从UI和非UI任务安排添加任务,而不是从UI中的.continuewith任务安排。 破碎的示例项目代码 在窗体上带有button1按钮的空Windows窗体项目中,此代码无法按预期工作(Windows 7 VS2010 Express Net 4.0)。 T2和T3在UI线程中运行,而不是工作线程。 将listBox1添加到button1表单并尝试以下操作: private delegate void DelegateSendMsg(String msg); private DelegateSendMsg m_DelegateSendMsg; private TaskScheduler uiSched; private Process thisProcess; private string thisProcessName, thisProcessId, […]

使用ContinueWith的TaskCanceledException

我一直试图找出为什么我得到一个最近开始行为不端的异步代码的TaskCanceledException。 我把我的问题减少到一个让我挠头的小代码片段: static void Main(string[] args) { RunTest(); } private static void RunTest() { Task.Delay(1000).ContinueWith(t => Console.WriteLine(“{0}”, t.Exception), TaskContinuationOptions.OnlyOnFaulted).Wait(); } 据我所知,这应该暂停一秒然后关闭。 不会调用ContinueWith(这仅适用于我的实际用例)。 但是,相反,我得到一个TaskCanceledException,我不知道它来自哪里!

Task.Faulted和Task.Exception

TaskStatus Enum或Task.Exception MSDN似乎都没有明确表示: TasksStatus.Faulted总是暗示Task.Exception != null (和TaskStatus != Faulted Task.Exception == null总是暗示Task.Exception == null )?