我目前遇到的問題是按下按鈕時,看起來什麼都沒有發生。我不確定爲什麼會發生這種情況。任務沒有運行?
這裏是被按下的按鈕上點擊方法:
private void computeStart_Click(object sender, EventArgs e)
{
_computeTokenSource = new CancellationTokenSource();
GenerateAll(_computeTokenSource.Token);
}
這裏是單擊名爲由方法。
private async void GenerateAll(CancellationToken token)
{
await new Task(() =>
{
var total = (long) Math.Pow(36, 6);
var options = new ParallelOptions {CancellationToken = token};
Parallel.For(0, total, options, a => GenerateCodeAndHash());
}, TaskCreationOptions.LongRunning);
}
最後,這是所謂的Parallel.For
private void GenerateCodeAndHash()
{
var result = new string(
Enumerable.Repeat(Chars, 6)
.Select(s => s[new Random().Next(s.Length)])
.ToArray());
if (_dictionary.ContainsKey(result)) return;
var hash = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(result));
var sb = new StringBuilder();
for (var j = 0; j < 2; j++)
sb.Append(hash[j].ToString("x2"));
_dictionary.TryAdd(result, sb.ToString());
}
你是否檢查過該頁面正在加載或沒有。如果Page_Load事件被觸發,請顯示你的源代碼。 –
@GovindaRajbhar這不是一個頁面,它是一個窗體。我應該指出這一點。 – shredder8910
'Math.Pow(36,6)'將溢出一個64位整數。顯然不是問題的關鍵。如果在相同的毫秒內調用,新的Random()將始終返回相同的隨機數。同步對_dictionary的訪問。 – usr