我使用此函数对数组进行排序。我必须在一个线程示例中使用。
public int[] Arrsort()
{
int[] array = new int[100];
Random rand = new Random(12345);
for (int i = 0; i <100; i++)
{
array[i] = rand.Next(100);
}
Array.Sort(array);
return array;
}
该函数的问题在于它没有使用Thread类对象。就像我在传递时一样 - &gt;
for (int i = 0; i < 5; i++)
{
Thread newThread = new Thread(p.Arrsort);
newThread.Start();
int[] arrsort1 = p.Arrsort();
// for (int n=0; n<arrsort.Length; n++)
Console.WriteLine(arrsort1[n]); //printing the elements
}
代码产生了这个错误...
错误CS0407&#39; int [] Program.Arrsort()&#39;有错误的返回类型
因此,我被迫做出另一个功能
public void Thrsort() { Arrsort(); }
//void method created so Arrsort() can be called in thread
//the Thread class is not taking int[] types directly (please see)
我将Thrsort()传递给线程对象。然后只编译了我的代码。
有没有其他方法可以解决问题,以便我不必创建另一个函数,即thrsort()?请在函数arrsort()的代码中建议编辑。
答案 0 :(得分:0)
当你启动一个线程时,它将开始并行运行。你还不知道什么时候结束。这就是为什么你不能只读取函数的返回值 - 它仍然可以运行!这就是为什么所有线程proc都返回void。
您可以采取一些措施来恢复数据。一种是在完成后设定一个商定的变量,例如
int[] buffer = null;
public void Arrsort()
{
/* snip */
Array.Sort(array);
buffer = array;
}
然后阅读:
if (!newThread.IsAlive)
{
Console.WriteLine("Thread has finished and the output is as follows:");
Console.WriteLine(string.Join(",", buffer));
}
这是一种蛮力的方式来做这件事,并且有点风险 - 如果你在编写阵列的同时仍然在编写时会遇到一些严重的问题。有更安全的方式。
一种“更好”的方法是使用Task.Run将它放在线程池上,然后等待它。
public int[] Arrsort()
{
/* snip */
Array.Sort(array);
return array;
}
然后使用Task.Run运行它,它将把它放在线程池中:
var task = Task.Run( () => Arrsort() );
var result = task.Result; //Will block until result is available
Console.WriteLine(string.Join(",", result));
答案 1 :(得分:0)
我使用此函数对数组进行排序。我必须在线程示例中使用。
public int[] Arrsort()
{
int[] array = new int[100];
Random rand = new Random(12345);
for (int i = 0; i <100; i++)
{
array[i] = rand.Next(100);
}
Array.Sort(array);
return array;
}
代码产生了这个错误...
错误CS0407&#39; int [] Program.Arrsort()&#39;有错误的返回类型
该函数的问题在于它没有使用Thread类对象。就像我传递时一样:
for (int i = 0; i < 5; i++)
{
Thread newThread = new Thread(p.Arrsort);
newThread.Start();
int[] arrsort1 = p.Arrsort();
// for (int n=0; n<arrsort.Length; n++)
Console.WriteLine(arrsort1[n]); //printing the elements
}
当你开始一个线程时,它将开始并行运行。你不知道什么时候结束。 这就是为什么你不能只读取函数的返回值 - 它仍然可以运行! 这就是为什么所有线程程序都返回void。