I have to store and return data on multitasking requests. If data is missing, I schedule loading and return null. I'm using some nubie scheduling by saving current jobs in a list. Also I need data request to be locked during writing. .NET 4.0

How can I schedule and lock properly?

	private Dictionary<string, IDataSet> data;
	private List<string> loadingNow;

	public IDataSet GetData(string dataId)
	{
		if (loadingNow.Contains(dataId))
			return null; // Currently loading. Return null

		if (data.ContainsKey(dataId))
			return data[dataId]; // Return data

		// Schedule loading async. Return null.
		loadingNow.Add(dataId);
		dataIoAsync.LoadDataAsync(dataParams);
		return null;
	}

	private void DataIoAsync_DataFileLoaded(object sender, DataFileLoadedAsyncEventArgs e)
	{
		loadingNow.Remove(e.DataId);
		data.Add(e.DataId, e.DataSet);
		OnDataFileLoaded(e.DataId);
	}