这是一个能辅助你实现异步代码的生成器。他可以在接口,类,结构体上工作。有时候甚至还能给已编译的方法扩展异步。
例如:对于TestClass而言,Run方法是比较耗时的。
public class TestClass
{
public void Run()
{
Thread.Sleep(2000);
}
}
所以应当提供异步方法
public class TestClass
{
public void Run()
{
Thread.Sleep(2000);
}
public Task RunAsync()
{
return Task.Run(() =>
{
this.Run();
});
}
}
而IntelligentCoder的作用,就是替你自动生成异步的代码。
public partial class TestClass
{
public Task RunAsync()
{
return Task.Run(() =>
{
this.Run();
});
}
}
(1)你需要安装IntelligentCoder的包。
NuGet\Install-Package IntelligentCoder
(2)在即将使用的地方,添加引用命名空间。
using IntelligentCoder;
对于常规类而言,直接为其添加AsyncMethodPoster标签即可。
[AsyncMethodPoster]
internal partial class TestClass1
{
public int Add1()
{
return 0;
}
public void Add2()
{
}
[AsyncMethod(Template = "My{0}Async")]//测试模板生成
public void Add3()
{
}
}
他会生成直接的异步代码
TestClass1 testClass1 = new TestClass1();
testClass1.Add1();
testClass1.Add1Async();
testClass1.Add2();
testClass1.Add2Async();
testClass1.Add3();
testClass1.MyAdd3Async();
对于接口,他需要实现类实现所有方法,所以必须在接口和实现类中都添加标签。其次,在实现类中,必须指定Deep
属性标签,用于深度搜索接口。该值是int类型,表示深度层次。然后他会自动补充异步方法。
[AsyncMethodPoster]
public partial interface TestInterface
{
/// <summary>
/// 添加
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
int Add(int a, int b);
}
[AsyncMethodPoster(Deep = 10)]
public partial class TestInterfaceImp : TestInterface
{
public int Add(int a, int b)
{
return a + b;
}
public void Add2<T>(int a, int b)
{
}
}
上述的两个方式,仅仅是用于当前编译时。而往往,更多时候是某个代码已经被编译,所以我们需要为其生成异步扩展类代码。
例如:我们已经有个类MyClass3,已被编译。
public class MyClass3
{
public int Add3(int a, int b)
{
return a + b;
}
}
那么我们可以新建项目,然后声明一个扩展类,指向MyClass3,那么这个扩展类就会为MyClass3,生成异步扩展方法。
[AsyncMethodPoster(Target = typeof(MyClass3))]
static partial class MyClass3Extension
{
}
下列Add3Async就是扩展方法。
MyClass3 myClass3=new MyClass3();
myClass3.Add3Async(10,20);
扩展静态类,操作和实例类一致,但是需要注意的是,扩展后,必须通过生成的扩展类调用。
[AsyncMethodPoster(Target = typeof(TestStaticClass))]
public static partial class TestStaticClassExtension
{
}
public static class TestStaticClass
{
public static int Add(int a, int b)
{
return a + b;
}
}
TestStaticClassExtension.AddAsync(10,20);
除了上述功能,他还支持异步方法的模板。
[AsyncMethodPoster(Template ="My{0}Async")]
partial interface IA
{
int Add(int a, int b);
}
和条件的预编译。
[AsyncMethodPoster(Precompile ="!NET45")]
partial interface IA
{
int Add(int a, int b);
}
众所周知,File类是CSharp里面的最重要的静态类之一,但是遗憾的是,他并没有提供任何异步方法,这使得我们在异步使用时非常麻烦,所以需要扩展异步。
您只需要将下列5行代码复制到你的项目,你即可拥有FileAsync的异步类。
[AsyncMethodPoster(Target = typeof(System.IO.File))]
static partial class FileAsync
{
}
string path = "path";
FileAsync.CreateAsync(path);
FileAsync.OpenAsync(path, FileMode.Open);
如果你有其他好的想法,我们可以一起交流哦。