炫意html5
最早CSS3和HTML5移动技术网站之一

我想把现有的c#代码同步方法都改成异步方法,请问应该怎么操作

我现在的同步代码是这样的:

class Program
{
static void Main(string[] args)
{
Test("A");
}
static void Test(string str)
{
switch (str)
{
case "A":
TestA();
break;
case "B":
TestB();
break;
default:
break;
}
}
static void TestA()
{
//处理xx问题
Console.WriteLine("TestA处理完毕");
}
static void TestB()
{
//处理xx问题
Console.WriteLine("TestB处理完毕");
}
}

我想把TestA和TestB变成异步方法 Test方法是否需要也启动一个Task 比如这样:

 class Program
{
static async Task Main(string[] args)
{
await Test("A");
}
static async Task Test(string str)
{
await Task.Run(() =>
{
switch (str)
{
case "A":
_ = TestA();
break;
case "B":
_ = TestB();
break;
default:
break;
}
});
}
static async Task TestA()
{
await Task.Run(() =>
{
//处理xx问题
Console.WriteLine("TestA处理完毕");
});
}
static async Task TestB()
{
await Task.Run(() =>
{
//处理xx问题
Console.WriteLine("TestB处理完毕");
});
}
}

TestA和TestB相当于一个后台任务,成功和失败我都不需要去管,有必要把Test方法也启动一个Task吗,记得异步就是要异步到底,只要有一个方法用async修饰了,那么所有与这个方法有关的方法都需要用async修饰,那我这种情况,给Test启动了一个Task是对的吗,有没有什么性能损失呢,还是直接这么调:

static void Test(string str)
{
switch (str)
{
case "A":
_ = TestA();
break;
case "B":
_ = TestB();
break;
default:
break;
}
}

或者:

        static async Task Test(string str)
{
switch (str)
{
case "A":
await TestA();
break;
case "B":
await TestB();
break;
default:
break;
}
}

回答

你 Task.Run(()=>switch)的时候 已经用另一个线程去异步执行switch里的代码了 Task&B不用再去Task.Run了 凡是调用了含异步代码的函数 都可以标注为async

炫意HTML5 » 我想把现有的c#代码同步方法都改成异步方法,请问应该怎么操作

Java基础教程Android基础教程