比如说我有一个方法可以将一些数据写入文件
public void Foo()
{
using (var file = File.OpenWrite(@"C:\Temp\foo.txt"))
{
var writer = new StreamWriter(file);
writer.WriteLine("foo");
// some other code
}
}
这引入了少量滞后。我决定使用异步IO来修复它。我将我的方法更改为以下内容:
public async Task FooAsync()
{
using (var file = File.OpenWrite(@"C:\Temp\foo.txt"))
{
var writer = new StreamWriter(file);
await writer.WriteLineAsync("foo");
// some other code
}
}
由于async void
被认为是邪恶的,我将返回类型更改为Task
。
现在在调用方法中,我有一个未经等待的Task
,这很糟糕。所以我也将该方法的签名更改为async Task
。该方法的父级也是如此。然后该方法是接口的一部分,该接口应返回void
,因此我更改接口中的方法以返回Task
。但还有另一个实现,现在也需要返回Task
。我解决了这个问题,还有一些调用方法等等。
现在最终有20个async
方法和2小时的花费时间,都是因为我想做一个简单的异步文件写。
我该如何避免这种情况?我是否应该在某个时候等待退回的Task
?或者我真的需要经历这一切吗?
答案 0 :(得分:2)
这引入了少量滞后。我决定使用异步IO修复它。
异步IO通常不会使代码更快,它会消耗更少的资源(特别是线程,因此也会占用内存)。
如果您希望使代码更具可扩展性,或者如果您不想阻止UI线程,define('HOST','***');
define('USER','***');
define('PASS','***');
define('DB','***');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
mysqli_set_charset( $con, 'utf8');
$sql = "INSERT INTO users (username, precio, text_cli, l_origen, l_destino, num_pal) VALUES('$user','$precio','$texto','$l_origen','$l_destino','$num_pal')";
将对您有所帮助。如果您想让代码更快,async
可能根本不会帮助您。