Ich habe dieses Programm erhalten, das mir den Syntaxfehler "System.Threading.Tasks.task enthält keine Definition für Ausführen" gibt.
Ich verwende VB 2010 .NET 4.0 Irgendwelche Ideen? Gibt es Ersatz für Run in .net 4.0?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ChatApp
{
class ChatProg
{
static void Main(string[] args)
{
Task<int> wakeUp = DoWorkAsync(2000,"Waking up");
Task.WaitAll(wakeUp);
}
static Task<int> DoWorkAsync(int milliseconds, string name)
{
//error appears below on word Run
return Task.Run(() =>
{
Console.WriteLine("* starting {0} work", name);
Thread.Sleep(milliseconds);
Console.WriteLine("* {0} work one", name);
return 1;
});
}
}
}
c#
.net
asynchronous
task-parallel-library
Ace Caserya
quelle
quelle
Antworten:
Es sieht so aus, als ob
Task.Factory.StartNew<T>
Sie danach suchen.return Task.Factory.StartNew<int>(() => { // ... return 1; });
Da der Compiler auf den Rückgabetyp schließen kann, funktioniert dies auch:
return Task.Factory.StartNew(() => { // ... return 1; });
quelle
Die Antwort mit der höchsten Stimme ist leider nicht genau richtig :
Das nächste
Task.Run
in 4.0 ist also so etwas wie:/// <summary> /// Starts the new <see cref="Task"/> from <paramref name="function"/> on the Default(usually ThreadPool) task scheduler (not on the TaskScheduler.Current). /// It is a 4.0 method nearly analogous to 4.5 Task.Run. /// </summary> /// <typeparam name="T">The type of the return value.</typeparam> /// <param name="factory">The factory to start from.</param> /// <param name="function">The function to execute.</param> /// <returns>The task representing the execution of the <paramref name="function"/>.</returns> public static Task<T> StartNewOnDefaultScheduler<T>(this TaskFactory factory, Func<T> function) { Contract.Requires(factory != null); Contract.Requires(function != null); return factory .StartNew( function, cancellationToken: CancellationToken.None, creationOptions: TaskCreationOptions.None, scheduler: TaskScheduler.Default); }
das kann verwendet werden wie:
quelle
Ich habe Ihren Code mit
Task.Factory.StartNew
Check Detail Link geändertstatic Task<int> DoWorkAsync(int milliseconds, string name) { //error appears below on word Run return Task.Factory.StartNew(() => { Console.WriteLine("* starting {0} work", name); Thread.Sleep(milliseconds); Console.WriteLine("* {0} work one", name); return 1; }); }
quelle
Wenn Sie Microsoft.Bcl.Async verwenden, klicken Sie hier:
return TaskEx.Run(() => { Console.WriteLine("* starting {0} work", name); Thread.Sleep(milliseconds); Console.WriteLine("* {0} work one", name); return 1; });
quelle