【发布时间】:2015-01-29 10:46:41
【问题描述】:
我正在运行同步方法。在里面我必须运行两个大方法,所以我想异步运行它们。我在想类似的东西
public void MyFunc()
{
var doWorkTask_1 = DoWork1();
var doWorkTask_2 = DoWork2();
var result1 = await doWorkTask_1;
var result2 = await doWorkTask_2;
if(result1 == result2)
....
Thread.Sleep(syncInterval);
}
为此,我需要:
-
DoWork1和DoWork2是异步的; -
MyFunc也是异步的;
但是没有方法是异步的!!!
所以我尝试了另一种方式:
public void MyFunc()
{
var doWorkTask_1 = Task.Run(() => DoWork1());
var doWorkTask_2 = Task.Run(() => DoWork2());
var result1 = doWorkTask_1.Result;
var result2 = doWorkTask_2.Result;
if(result1 == result2)
....
Thread.Sleep(syncInterval);
}
所以,第一个问题: 我用两种不同的方式写过同样的东西吗?
第二个问题。我必须每X次运行MyFunc方法,所以我这样称呼它:
Task.Factory.StartNew(MyFunc);
我可以简单地称呼它吗
MyFunc();
我的问题是因为在myFunc 里面我有一个Thread.Sleep。我可以让主线程休眠还是让主线程休眠更好?
我希望我已经清楚了。 谢谢。
【问题讨论】:
-
你能让
MyFunc异步吗?还是必须同步? -
我更喜欢让它同步,因为如果我执行 MyFunc async,我还必须执行调用 MyFunc async 的方法,等等......
标签: c# .net multithreading asynchronous async-await