我有一个简单的针对DB2/400的心跳方法:
我有一个简单的针对DB2/400的心跳方法:
public bool CheckConnection()
{
try
{
using (OleDbConnection db = new OleDbConnection( this.conString ))
{
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "select 1 from sysibm.sysdummy1";
cmd.Connection = db;
db.Open();
cmd.ExecuteReader();
db.Close();
return true;
}
}
catch (Exception)
{
return false;
}
}
当我的应用程序运行时,我希望使用它,当然我不想阻塞表单其余部分的执行。
我的表单中的主要方法:
public FrmMain()
{
InitializeComponent();
PrepareFormTexts();
PrepareFormData();
PrepareStateClass();
CheckDbConnection();
//Initialize Data Access for AS400
Dal = JDE8Dal.Instance;
Dal.conString = Properties.Settings.Default.conAS400;
//Initialize Icons
picCon.Image = Properties.Resources.ledGreen;
picStatus.Image = Properties.Resources.ledGreen;
// Load recording from file if they exist
PrepareRecordings(AppState.DataFileName,'|');
}
CheckDbConnection方法:
private async Task<bool> CheckDbConnection()
{
return await Task.Factory .StartNew(() => Dal.CheckConnection());
}
我认为程序可以正常运行,但是出现了一个警告。
警告1:由于此调用未被等待,当前方法的执行在调用完成之前继续进行。请考虑将“await”运算符应用于调用结果。
我应该忽略它吗?我应该在主方法中加入async吗?
更新:在下面的讨论中,我发现由于我正在使用.NET 4.0的异步包,我无法使我的dal方法非阻塞。我唯一能做的就是使用async/await + task.factory.startnew来保持我的应用程序在后台工作时dal在后台工作。
以下是代码:
public FrmMain()
{
InitializeComponent();
Load += FormLoadInit;
}
private async void FormLoadInit(object sender, EventArgs e)
{
PrepareFormTexts();
PrepareFormData();
PrepareStateClass();
txtLot.Select();
//Initialize Data Access for AS400
Dal = JDE8Dal.Instance;
Dal.conString = Properties.Settings.Default.conAS400;
// Load recording from file if they exist
PrepareRecordings(AppState.DataFileName, '|');
bool cn = await Task.Factory.StartNew(() => Dal.CheckConnection());
//Initialize Icons
picCon.Image = cn ? Resources.ledGreen : Resources.ledRed;
picStatus.Image = Properties.Resources.ledGreen;
}
CheckDbConnection
的结果是否真的会在任何时候被使用? - Marc Gravell